PowerShell vs. Python:一場歷史之戰

什麼是最好的編程語言?問十位不同的開發者,你可能會得到十種不同的答案。在本文中,我們將比較兩種語言:PowerShell和Python。您將獲得對這兩種語言的一瞥,並了解它們在語法、跨平台可用性等功能上的比較和對比。

現在是PowerShell vs. Python的對決時間!

通過閱讀本文,您將能夠回答一些常見問題:

  • 這兩種語言有什麼共同之處?
  • 它們有何不同之處?
  • 每種語言的最佳用例是什麼?
  • 語法有何差異?
  • 要充分發揮其中一種語言的優勢,需要擔任什麼樣的角色?

本文適合那些對這兩種語言幾乎一無所知且對使用PowerShell或Python感到困惑的人。本文也適合那些已經了解其中一種語言並希望了解另一種語言的人。

讓我們開始吧!

根據職業角色

儘管您可能能夠整天談論Python和PowerShell的技術方面,但比較這兩種語言的一個重要方面是確定哪種職業角色最適合使用這兩種語言。

PowerShell和Python都是在兩個不同的領域(Microsoft和開源Linux社區)上開發的。這兩種語言的語法、社區和整體感覺都不同,因此通常適用於特定的職業角色。

值得注意的是,PowerShell(Core)在6.0.0版本及以后已经开源。时代在变化。

系统管理员

PowerShell和Python都是学习系统管理员的好语言。它们都是非常好的自动化工具,并且可以为系统管理员节省大量时间。然而,对于Windows系统管理员来说,由于其本地的.NET框架集成,PowerShell可能是更好的选择。

另一方面,Python对于Linux系统管理员来说非常好。

尽管Python和PowerShell(Core)都是跨平台的,但你会发现大多数工作角色将在Windows和PowerShell之间以及Linux和Python之间划分。

开发者

对于更多面向开发者的工作,Python是绝对的领导者。Python在PowerShell从未涉及的领域拥有大量的支持,例如数据科学、统计分析等等。Python有时感觉更像是一个面向科学的语言。

Python还运行许多大型的服务器端Web应用程序和其他“开发者友好”的应用程序。

尽管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創建一個用於管理日常任務的工具,甚至可以使用Windows PowerShell創建一個GUI,使你的工具更加用戶友好。

Python

Python通常最適用於機器學習、統計、數據科學和服務器端Web和桌面應用程序等“重型”任務。Python還對圖像處理有很好的支持。

了解語法的共同點和差異

讓我們深入了解每種語言的細節,以進行比較和對比。

PowerShell和Python都是面向對象的,這意味著它們都建立在邏輯對象的概念上,在執行特定任務時創建、操作和重用對象。

PowerShell和Python都通過模塊的方式重用代碼。模塊可以在其他程序中重用,或者直接導入其他程序員創建的模塊。

兩種語言都有大量的模塊庫,您可以在腳本中輕鬆使用。

PowerShell是基於.NET框架的基於任務的命令行殼層和腳本語言,它接受並返回.NET框架對象,而Python則是一種解釋性編程語言。

Python解釋器接受人可讀代碼並創建另一種由解釋器理解的代碼形式,以後再將其轉換為機器可讀的代碼,實際執行在此進行。

現在讓我們從兩種語言的基礎知識開始,例如注釋、聲明變量、條件和其他基礎知識,以更好地了解它們的相似之處和不同之處。

注釋

在PowerShell或Python中進行單行注釋是相同的-在行的開頭使用井號(#),如下所示。

# 這是一個PowerShell註釋,不會被執行
# 這是一個Python註釋,不會被執行。

聲明變量

在PowerShell中,所有變量都以$開頭,後面跟著一個名字。下面您可以看到如何分配一個變量來保存一個整數。

$var = 1

在PowerShell中,定義字符串變量的方式相同,但您需要將值括在單引號或雙引號中。

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

有關PowerShell變量的更多信息,請參閱about_Variables文檔

在Python中,變數的處理方式幾乎相同,但不需要變數以$開頭。

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

您可以通過W3Schools和其他許多在線資源來了解更多關於Python變數的信息。

處理數學運算

在PowerShell和Python中,任何沒有小數的正數或負數都是整數。默認情況下,它們將自動分配給整數類型的變數。可以對這些變數進行正常的數學運算。

在PowerShell中,您可以查看以下一些基本數學運算的示例。

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

有關更多信息,請參閱RedmondMag上的如何在PowerShell中進行數學運算系列

同樣地,在Python中,您也可以進行基本的數學運算,如下所示。

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

在這篇有用的geeks2geeks.com文章中,了解更多關於Python中的數學運算。

使用條件語句

條件語句對於任何編程語言都很重要。條件語句允許開發人員根據一個或多個條件重定向代碼的流程。當涉及到if/then構造等條件語句時,您會發現PowerShell和Python幾乎是相同的。

您可以看到以下两种语言之间有一个微小但非常重要的差别。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
}

用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 if/then语句的外观和行为。运行下面的代码时,你会看到输出是77 is greater than 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 的各种数字。

我们将在PowerShellPython中分别创建一个函数来处理从文件返回的所有数字。

使用 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/