从系统导入什么是"script"的功能



我正在阅读"Learn Python the Hard Way",并对第二行的"脚本"部分感到困惑。

from sys import argv
script, filename = argv

据我了解,第二行说:scriptfilename构成argv。我尝试在没有"脚本"部分的情况下运行我的代码,它工作得很好。我不确定它的目的是什么。

通常,命令行可执行文件的第一个参数是脚本名称,其余参数是预期的参数。

在这里,argv是一个预期包含两个值的列表:脚本名称和参数。使用 Python 的解包符号,你可以编写

script = argv[0]
filename = argv[1]

script, filename = argv

同时,如果参数数量意外(如一个或三个),也会抛出错误。这可能是一个好主意,具体取决于一个人的代码,因为它还可以确保没有意外的参数。

但是,以下代码不会导致filename实际包含文件名:

filename = argv

这是因为filename现在是参数列表。举例说明:

script, filename = argv
print("Script:", script)  # Prints script name
print("Filename:", filename)  # Prints the first argument
filename = argv
print("Filname:", filename)  # Prints something like ["my-script.py", "my-file.txt"]

其他人已经解释了什么是script,但python语句被称为解包,通常应用于元组或序列。

这是一种为=符号右侧元组(或序列)中的每个值分配变量的快捷方式。

这不是特定于argv的东西:

>>> a,b = ('Hello','World')
>>> a
'Hello'
>>> b
'World'

要记住的一件事是,左侧的变量数必须与右侧序列中的项目数匹配,否则您将获得:

>>> a,b,c = ('Hello','World')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 2 values to unpack
>>> a,b = ('Hello','World','!')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack

argv是程序参数的列表。标准 shell 行为包括程序本身的名称作为 argv 中的第一个参数。

如果左侧的变量数量等于右侧列表的大小,Python 可以一次分配多个值(它也可以处理更多情况,但这是最基本的)。 例如

script, filename = argv

script = argv[0]
filename = argv[1]

另请注意,如果脚本没有正好两个元素,则该脚本将引发argv ValueError

argv中的第一项是正在运行的 Python 脚本的名称。任何其他参数(在本例中为文件名)都是传递给此脚本的参数。

这两个参数被分配了名称 scriptfilename 。完全有可能script再也不会使用;它基本上是一个占位符。但是,如果您删除它,您将filename = argv[1]

相关内容

最新更新