PowerShell vs. Python: קרב לכל הדורות

מהו שפת התכנות הטובה ביותר? ייתכן שתקבל עשר תשובות שונות כאשר תשאל עשרה מפתחים שונים. במאמר זה, אנו הולכים להשוות שפת תכנות; PowerShell ו-Python. תקבל הצצה לכל אחת מהשפות אלו ותבין כיצד הן נשוות ומתפקדות בתכונות כמו תחביר, זמינות למערכות הפעלה שונות ועוד.

זה הזמן להשוואת PowerShell ו-Python!

עד לסוף המאמר הזה, תוכל לענות על שאלות נפוצות:

  • מה הדומה בין שתי השפות הללו?
  • מה ההבחנה ביניהם?
  • מהם המקרים הטובים ביותר לכל אחת מהן?
  • איך התחביר שונה?
  • איזה תפקיד מיטבי למישהו כדי למצוא שימוש הטוב באחת מהשפות מעל לשנייה?

מאמר זה מיועד לאלו שאין להם ידע מועט או אין להם ידע כלל על אחת מהשפות, והם מבולבלים באם להשתמש ב-PowerShell או ב-Python. מאמר זה גם מיועד לאלו שכבר מבינים אחת מהשפות ורוצים ללמוד על השפה השנייה.

בואו נתחיל!

לפי תפקיד עבודה

אף שיתכן שתוכל לדבר על ההיבטים הטכניים של Python ו-PowerShell כל היום, חלק חשוב בהשוואת השפות הוא לקבוע איזה סוג של תפקיד עבודה מתאים לכל אחת מהשפות.

שני שפות אלו, PowerShell ו-Python, פותחו בשני צידי הגדר (Microsoft וקהילת Linux הקוד הפתוח). תחבירן, קהילתן ולכן התחושה הכללית שלהן שונים ולכן הן מותאמות באופן כללי לסוגי תפקידי עבודה מסוימים.

על ידי ציון כאן, ש-PowerShell (Core), שגרסה 6.0.0 ואילך, נפתח כקוד פתוח. הזמנים משתנים.

מנהלי מערכת

שני PowerShell ו-Python הם שפות נהדרות ללמידה עבור מנהלי מערכת. שניהם הם כלי אוטומציה נהדרים, ויכולים לחסוך המון זמן למנהל מערכת. ניתן לטעון, בכל זאת, שלמנהלי מערכת ב-Windows, PowerShell יהיה בחירה טובה יותר פשוט בגלל השילוב הנוכחי של .NET framework.

פיתוחי מערכת

אמנם Python ו-PowerShell (Core) הם שניהם קרוס-פלטפורמה, תמצאו שרוב רב של תפקידי עבודה שם יחולקו בין Windows ו-PowerShell, ובין Python ו-Linux.

מפתחים

לעבודות המיועדות יותר למפתחים, Python הוא המוביל בהרבה. Python תומך באופן נרחב בתחומים שבהם PowerShell אף פעם לא נגע, כגון מדעי הנתונים, ניתוח סטטיסטי ועוד. לפי פעמים, Python מרגיש יותר כמו שפה המיועדת למדע.

Python רץ גם על הרבה אפליקציות גדולות בצד השרת ואפליקציות "ידידותיות למפתחים" אחרות.

אמנם PowerShell יכול לשמש כשפת פיתוח, רוב הפעמים זה מתאים יותר לתפקידי עבודה שדורשים יותר אוטומציה, כמו DevOps או אוטומציה כללית של מנהל מערכת.

לפי מערכת ההפעלה

PowerShell

PowerShell הוא הגיבור עבור סביבות Windows; זהו הכישור הטוב ביותר שניתן לנצל כדי לאוטומציה משימות ב-Windows. זה נכון במיוחד כאשר מדובר במוצרים כמו Active Directory ו-Microsoft Exchange בשתי הגרסאות, העסקיות ו-Office 365.

מאחר ש-PowerShell יש גישה ישירה ל-.NET Framework, הוא משולב באופן מושלם עם כל מערכות ההפעלה של Windows וניתן להשתמש בו בקלות לביצוע כל משימה.

אך, יש ל-PowerShell תמיכה ב-Linux אך, ככתיבת טקסט זה, היא לא כה נפוצה כמו Python.

Python

כללית, Python עדיף בסביבות Linux. בזכות השורשים העמוקים שלו בקהילה של Linux, תמצאו מודולי Python שמסוגלים לעשות כמעט כל דבר ב-Linux.

Python יכול גם לרוץ על פלטפורמות אחרות כמו iOS ו-AIX.

לפי המשימה

PowerShell

ניתן להשתמש ב-PowerShell כדי ליצור כלי לניהול משימות יומיות, ותוכלו אף ליצור ממשק משתמש גרפי (GUI) באמצעות Windows PowerShell כדי שהכלי שלך יהיה יותר ידידותי למשתמש.

Python

בכלל, Python הוא הכי נפוץ למשימות "כבדות" כמו למידת מכונה, סטטיסטיקה, מדעי הנתונים ויישומי שרת צד שרת ושולחן. Python גם תומך מצוין בעיבוד תמונה.

הבנת התחביריות המשותפות וההבדלים

בואו נעבור לפרטים הטכניים של כל שפה כדי להשוות אותן.

PowerShell ו-Python הן שתי שפות מונחות עצמים, כלומר, שתי השפות בנויות על המושג של אובייקטים לוגיים שבהם הן יוצרות, מניפות ומשתמשות באובייקטים כדי לבצע משימות ספציפיות.

שתי השפות, PowerShell ו-Python, משתמשות שוב ושוב בקוד באמצעות מודולים. מודולים יכולים להיות מועברים בהמשך לתוכניות אחרות, או תוכלו לייבא מודולים שנוצרו על ידי מתכנתים אחרים.

לשני השפות יש ספריות גדולות של מודולים שניתן להשתמש בקלות בתסריטים שלך.

PowerShell הוא מסוף שורת פקודה מבוסס משימות ושפת תסריטים בנויה על .NET framework, שמקבלת ומחזירה עצמים של .NET framework. לעומת זאת, Python הוא שפת תכנות מפורשת

מתרגם ה-Python לוקח את הקוד שנכתב בצורה שקולה לאדם ויוצר טופס נוסף של קוד שניתן להבין על ידי המתרגם, כדי לשנות אותו מאוחסן לקוד שניתן להבין על ידי מכונה ובו מתבצע הביצוע האמיתי.

בואו נתחיל כעת עם היסודות של שתי השפות, כמו הערות, הצהרת משתנים, תנאים ויסודות אחרים, כדי להבין טוב יותר את הדמיונים וההבחנות ביניהם.

הערות

יצירת הערה יחידה ב-PowerShell או ב-Python זהה – השתמשו בסימן החש (#) בתחילת השורה כמו בדוגמה הבאה.

# זו הערת PowerShell שלא תותר בביצוע
# זו הערת Python שלא תותר בביצוע

הצהרת משתנים

כל המשתנים ב-PowerShell מתחילים ב-$ ואחריהם שם. להלן דוגמה לאיך משתנה מוקצה להכיל מספר שלם.

$var = 1

הגדרת משתני מחרוזת עובדת באותו אופן ב-PowerShell, אך תצטרכו להקיף את הערך בגרשיים יחידות או כפולות.

$var2 = "string"
$var3 = 'string'

בדקו את מסמך אודות משתנים למידע נוסף על משתני PowerShell.

בפייתון, משתנים נתונים בטיפול דומה מאוד, אך אין צורך שהמשתנה יתחיל ב־`$`.

var1 = 7
var2 = "string"
var3 = 'string'

ניתן למצוא מידע נוסף על משתנים בפייתון באמצעות W3Schools וגם במקורות מקוונים נוספים.

עבודה עם פעולות מתמטיות

ב־PowerShell ובפייתון, כל מספר חיובי או שלילי בלעדי נקודה עשרונית נחשב למספר שלם. כברירת מחדל, יוקצו באופן אוטומטי למשתנה מסוג שלם. פעולות מתמטיות ניתן לבצע כרגיל על משתנים אלו.

ב־PowerShell, ניתן לראות דוגמאות לפעולות מתמטיות בסיסיות למטה.

$int1 = 70
$int2 = 77
$int3 = -10
$int1 + $int2
$int2 - $int1
$int1 + $Int3
Python and integers

למידע נוסף, יש לבדוק את סדרת איך לעשות מתמטיקה ב־PowerShell ב־RedmondMag.

באותה מידה, בפייתון ניתן לבצע פעולות מתמטיות בסיסיות כפי שמוצג למטה.

int1 = 70
int2 = 77
int3 = -10
int1 + int2
int2 - int1
int1 + int3
Artitmetic in Python

למידע נוסף על פעולות מתמטיות בפייתון, ניתן לקרוא במאמר המועיל ב־geeks2geeks.com.

שימוש בהצהרות תנאי

הצהרות תנאי הן חשובות בכל שפת תכנות. הן מאפשרות למפתח להפנות את זרימת הקוד בהתאם לתנאי אחד או יותר. כאשר אתה עוסק בהצהרות תנאי כמו בהקניית if/then, תגלה ש־PowerShell ופייתון דומים בצורה רבה.

אתה יכול לראות למטה שיש פה הבדל קטן, אך חשוב מאוד, בין שני השפות. PowerShell תלוי במידה רבה בסוגריים ( ), סוגריים מסולסלים { }, ותווים מיוחדים אחרים, אבל Python משתמשת בכניסה שורתית.

שימו לב לכל הסוגריים והסוגריים מסולסלים שנמצאים מתחת בדוגמת הקוד של PowerShell.

if (Condition) {
    Code to be executed if the condition is true
} else {
    Other code to be executed if the condition is false
}

השוו את קוד PowerShell לקוד Python שבהמשך. בשורה התחתונה תראו רק נקודתיים שמציינות את סיום הצהרות תנאי ורווחים שמציינים את הקוד שיש לבצע בתוך התנאי.

if condition:
    Code to be executed if the condition is true
else:
    Other code to be executed if the condition is false

כדי להדגיש זאת, בואו נראה כיצד נראית פקודת if/then טיפוסית ב-PowerShell ואיך היא פועלת. כאשר הקוד הבא מורץ, תראו פלט של 77 הוא גדול מ-70.

$var1 = 77
$var2 = 70
if ($var1 -gt $var2) {
    Write-Host -Object "$var1 is greater than $var2"
} else {
    Write-host -Object "$var1 is less than $var2"
}

בניגוד לכך, שימו לב כיצד המשימה הזו מתבצעת ב-Python. ישנם הבדלים רבים כולל אופרטורים ופקודות שונות להדפסת טקסט לקונסולה.

if var1 > var2:
    print(f"{var1} is greater than {var2}")
else:
    print(f"{var1} is less than {var2}")

לולאות

מושג חשוב נוסף בשפות תכנות הם לולאות. לולאות מאפשרות לשפה לחזור, או לעבור שוב ושוב על קוד מסוים עד שנתנה תנאי, או עד מספר מסוים של פעמים.

ב-PowerShell, לולאת foreach נפוצה תיראה כך כמו בדוגמה הבאה.

foreach ($item in $list) {
	Code to be executed for each item
}

ב-Python, לולאה דומה המבצעת אותה המשימה תשתמש בלולאת for כפי שמוצג למטה.

for item in list:
	Code to be executed for each item

יש המון דמיון בתחביר השפה שבו משתמשים PowerShell ו-Python, במיוחד כאשר מדובר ביסודות ובשימוש המרכזי בשפות. הדמיונים אלו הם יתרון עצום לכל מי ששולט ב-PowerShell ורוצה ללמוד עוד על Python, או להפך.

פתרון לבעיה זהה בדרך שונה

בואו נראה כיצד אפשר לפתור בעיה נפוצה בצורה שונה עם PowerShell ו-Python. לכך, נקרא קובץ טקסט פשוט עם מספרים מופרדים בשורות ונחזיר רק טווח מסויים של מספרים לקונסול.

הקובץ שנשתמש בו יקרא input_text.txt ומכיל מספרים בטווח רחב מ-1 עד 6345.

ניצור פונקציה בשני השפות, PowerShell ו־Python, לעיבוד כל המספרים שישובו מהקובץ.

עיבוד קובץ עם PowerShell

מטה תראו איך ניתן לבצע זאת ב-PowerShell.

Define a function called Get-TwoDigits
 function Get-TwoDigits {
     [CmdletBinding()]
     param(
         [Parameter()]
         $List ## מספק פרמטר קלט בשם List המייצג מספרים
     )
     ## לולאה על כל מספר ב-List. אם המספר גדול מ-9 וקטן מ-99
     ## יחזיר את המספר לקונסול
     foreach($num in $List){
         if($num -gt 9 -and $num -le 99 ){
             Write-Host $num
         }
 }
 }
 Read the text file and place contents into an array called inputlist
 PS51> $inputlist = Get-Content -Path .\input_text.txt
 Call the function providing the contents of the file as the List parameter
 PS51> Get-TwoDigits -List $inputlist

כאשר אתה מפעיל את Get-TwoDigits, תראה ש-PowerShell תחזיר רק מספרים ב-input_text.txt שנמצאים בין 9 ל-99.

עיבוד קובץ עם Python

עכשיו, נבצע את אותם שלבים באמצעות Python כדי לראות את ההבחנות בתחביר.

## פתח את הטיפוס באמצעות השיטה open()
File_Read = open("/PS_Vs._PY/input_text.txt")

## קרא את הקובץ ופצל את המחרוזת הגדולה למערך באמצעות השיטה splitlines()
inputData = (File_Read.read().splitlines())

## סגור את הטיפוס שנפתח
File_Read.close()

## הגדר פונקציה בשם two_digits עם פרמטר יחיד בשם input_list
def two_digits (input_list):
    ## חזור על כל מספר ברשימה. אם המספר גדול מ-9 וקטן מ-99, החזר את המספר הזה לקונסול
    ## אז 99, החזר את המספר הזה לקונסול
    for num in input_list:
        if (int(num) > 9) and (int(num) <= 99):
            print(num)


>>> two_digits(inputData)

כאשר אתה מפעיל את הפונקציה two_digits(), תראה ש-Python תחזיר רק מספרים ב-input_text.txt שנמצאים בין 9 ל-99.

יצירת פונקציה ב-Python זהה במבנה כמעט. יש לזכור שההזחה חשובה ב-Python, כמו גם רגישות לתחום.

קריאה נוספת

Source:
https://adamtheautomator.com/powershell-vs-python/