我正在阅读"艰苦学习Python"并被#34;脚本"混淆了第二行的一部分。
from sys import argv
script, filename = argv
根据我的理解,第二行说:script
和filename
包含argv
。
我尝试在没有"脚本的情况下运行我的代码"部分它工作得很好。我不确定它的目的是什么。
答案 0 :(得分:14)
通常,命令行可执行文件的第一个参数是脚本名称,其余参数是预期的参数。
这里,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"]
答案 1 :(得分:5)
其他人解释了什么是script
,但是python语句叫做unpacking,通常应用于元组或序列。
这是为=
符号右侧的元组(或序列)中的每个值分配变量的快捷方式。
这不是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
答案 2 :(得分:2)
argv
中的第一项是您正在运行的Python脚本的名称。任何其他参数(在本例中为文件名)是传递给此脚本的参数。
这两个参数的名称分配为script
和filename
。 script
完全不可能再次使用;它基本上是一个占位符。但是,如果删除它,则会改为filename = argv[1]
。
答案 3 :(得分:2)
argv
是程序参数的列表。标准shell行为包括程序本身的名称作为argv
中的第一个参数。
如果左侧的变量数等于右侧列表的大小,Python可以一次分配多个值(它也可以处理更多的情况,但这是最基本的)。 E.g。
script, filename = argv
与
相同script = argv[0]
filename = argv[1]
另请注意,如果ValueError
没有恰好两个元素,该脚本将引发argv
。