我正在阅读“Learn Python the Hard Way”,对第二行的“脚本”部分感到困惑。
from sys import argv
script, filename = argv
据我了解,第二行说:script
并且filename
包含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]
另请注意,该脚本将引发一个ValueError
ifargv
不完全有两个元素。
第一项argv
是您正在运行的 Python 脚本的名称。任何其他参数(在本例中为文件名)都是传递给此脚本的参数。
这两个参数被分配了名称script
和filename
。完全有可能script
永远不再使用;它基本上是一个占位符。但是,如果您将其删除,则可以这样做filename = argv[1]
。