在下面的代码中我理解sys.argv使用列表,但是我不清楚索引是如何在这里使用的.
def main():
if len(sys.argv) >= 2:
name = sys.argv[1]
else:
name = 'World'
print 'Hello', name
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
如果我改变
name = sys.argv[1]
Run Code Online (Sandbox Code Playgroud)
至
name = sys.argv[0]
Run Code Online (Sandbox Code Playgroud)
并为它返回的参数键入内容:
Hello C:\Documents and Settings\fred\My Documents\Downloads\google-python-exercises
\google-python-exercises\hello.py
Run Code Online (Sandbox Code Playgroud)
哪种有意义.
有人可以解释这里如何使用2:
if len(sys.argv) >= 2:
Run Code Online (Sandbox Code Playgroud)
以及如何在这里使用1:
name = sys.argv[1]
Run Code Online (Sandbox Code Playgroud)
wes*_*cpy 39
让我们说你在命令行:
C:\> C:\Documents and Settings\fred\My Documents\Downloads\google-python-exercises
\google-python-exercises\hello.py John
Run Code Online (Sandbox Code Playgroud)
为了便于阅读,我们只需将其缩短为:
C:\> hello.py John
Run Code Online (Sandbox Code Playgroud)
argv表示通过命令行输入出现的所有项目,但计数从零(0)开始而不是一(1):在这种情况下," hello.py"是元素0," John"是元素1
换句话说,sys.argv[0] == 'hello.py'而且sys.argv[1] == 'John'......但是看,这有多少元素?2,对!所以即使数字是0和1,这里有2个元素.
len(sys.argv) >= 2只检查您是否输入了至少两个元素.在这种情况下,我们输入了2.
现在让我们将您的代码翻译成英文:
define main() function:
if there are at least 2 elements on the cmd-line:
set 'name' to the second element located at index 1, e.g., John
otherwise there is only 1 element... the program name, e.g., hello.py:
set 'name' to "World" (since we did not get any useful user input)
display 'Hello' followed by whatever i assigned to 'name'
Run Code Online (Sandbox Code Playgroud)
那么这是什么意思?这意味着如果你输入:
hello.py",代码输出" Hello World",因为你没有给出一个名字hello.py John",代码输出" Hello John"因为你做了hello.py John Paul",代码仍然输出" Hello John",因为它不保存也不使用sys.argv[2],这是" Paul" - 在这种情况下你能看到len(sys.argv) == 3因为sys.argv列表中有3个元素吗?Tho*_*ers 11
sys.argv是传递给Python程序的参数列表.第一个参数sys.argv[0]实际上是调用程序的名称.这不是Python的事情,而是大多数操作系统的工作方式.sys.argv[0]存在的原因是,您可以根据调用方式更改程序的行为.sys.argv[1]因此是你实际传递给程序的第一个参数.
因为Python中的列表(如大多数序列)开始索引为0,并且因为索引超出列表末尾是一个错误,所以您需要先检查列表的长度是否为2或更长,然后才能访问sys.argv[1].
简而言之,sys.argv是用于运行程序的命令中出现的单词列表.第一个单词(列表的第一个元素)是程序的名称,列表的其余元素是提供的任何参数.在大多数计算机语言(包括Python)中,列表从零开始索引,这意味着列表中的第一个元素(在本例中是程序名称)是sys.argv[0],第二个元素(第一个参数,如果有的话)是sys.argv[1],等等.
测试len(sys.argv) >= 2只是检查列表的长度是否大于或等于2,如果至少有一个参数提供给程序将是这种情况.
所以如果我想返回一个名字和姓氏:你好 Fred Gerbig 我会使用下面的代码,这段代码有效,但它实际上是最正确的方法吗?
import sys
def main():
if len(sys.argv) >= 2:
fname = sys.argv[1]
lname = sys.argv[2]
else:
name = 'World'
print 'Hello', fname, lname
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
编辑:发现上面的代码使用 2 个参数但崩溃了 1。试图将 len 设置为 3 但什么也没做,仍然崩溃(重新阅读其他答案,现在明白为什么 3 什么都不做)。如果只输入一个参数,如何绕过参数?或者错误检查如何返回“您必须输入 2 个参数”?
编辑2:明白了:
import sys
def main():
if len(sys.argv) >= 2:
name = sys.argv[1] + " " + sys.argv[2]
else:
name = 'World'
print 'Hello', name
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
111207 次 |
| 最近记录: |