PowerShell vs. Python:史上最大比拼

什么是最好的编程语言?当询问十个不同的开发人员时,你可能会得到十个不同的答案。在本文中,我们将比较两种语言;PowerShell 和 Python。您将了解每种语言,并了解它们在诸如语法、跨平台可用性等方面的比较和对比。

现在是 PowerShell 对比 Python 的时候了!

在本文结束时,您将能够回答一些常见问题:

  • 这两种语言有什么共同点?
  • 它们有何不同之处?
  • 它们各自的最佳使用案例是什么?
  • 语法有何不同?
  • 某人需要什么样的角色才能更好地利用其中一种?

本文适用于对这两种语言几乎一无所知并且对使用 PowerShell 或 Python 感到困惑的人。本文还适用于那些已经了解其中一种语言并且想要了解另一种语言的人。

让我们开始吧!

根据职业角色

虽然你可能能够整天讨论 Python 和 PowerShell 的技术方面,但比较这两种语言的一个重要部分是确定哪种工作角色最适合每种语言。

PowerShell 和 Python 都是在两个不同的领域(微软和开源 Linux 社区)发展起来的。这两种语言的语法、社区,因此它们的整体感觉都不同,因此通常被采用到特定的工作角色中。

在这里应该注意,PowerShell(Core)在版本6.0.0及更高版本中已经开源。时代在变化。

系统管理员

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

另一方面,Python非常适合Linux系统管理员。

尽管Python和PowerShell(Core)都是跨平台的,但你会发现市场上的大多数工作岗位将分布在Windows和PowerShell,以及Python和Linux之间。

开发人员

对于更面向开发人员的工作,Python是绝对的领导者。Python在PowerShell从未涉足的领域有着巨大的支持,例如数据科学、统计分析等。有时,Python在某种程度上更像是一种面向科学的语言。

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

尽管PowerShell 可以 用作开发语言,但它通常更适用于需要更多自动化的工作岗位,如DevOps或一般系统管理员自动化。

按操作系统分类

PowerShell

PowerShell是Windows环境的英雄;这是你在Windows中自动执行任务的最佳技能。特别是在处理Active Directory和Microsoft Exchange等产品时,无论是在本地还是Office 365版本中,PowerShell都非常强大。

由于PowerShell可以直接访问.NET Framework,它与所有Windows系统完美集成,并且可以轻松用于完成任何任务。

然而,PowerShell确实支持Linux,但截至撰写本文时,其在Linux上的应用远不及Python。

Python

一般在Linux环境中更为出色。由于其在Linux社区的深厚根基,你会发现在Linux中几乎可以找到用Python执行几乎任何任务的模块。

Python还可以在其他平台上运行,如iOS和AIX。

按任务

PowerShell

你可以使用PowerShell创建一个用于管理日常任务的工具,甚至可以使用Windows PowerShell创建GUI,使你的工具更加用户友好。

Python

Python通常最适用于像机器学习、统计学、数据科学以及服务器端Web和桌面应用程序等“重型”任务。Python还在图像处理方面提供了出色的支持。

了解语法的共同点和区别

让我们深入了解每种语言的要点,以进行比较和对比。

PowerShell和Python都是面向对象的,这意味着两者都建立在逻辑对象的概念上,它们通过创建、操作和重用对象来执行特定的任务。

PowerShell和Python都通过模块的方式重用代码。模块可以在其他程序中进行潜在的重用,或者你可以直接导入其他程序员创建的模块。

两种语言都有一个大型的模块库,您可以轻松地在您的脚本中使用。

PowerShell是基于.NET框架构建的基于任务的命令行 shell 和脚本语言,它接受并返回.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大于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):
    ## 循环遍历List中的每个数字。如果数字大于9且小于
    ## 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/