Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python术语:位于“左”的事物argv";在“艰苦学习Python”练习13中_Python_Terminology_Iterable Unpacking - Fatal编程技术网

Python术语:位于“左”的事物argv";在“艰苦学习Python”练习13中

Python术语:位于“左”的事物argv";在“艰苦学习Python”练习13中,python,terminology,iterable-unpacking,Python,Terminology,Iterable Unpacking,Zed Shaw的“艰苦学习Python”经常要求您“用英语写出”脚本的每一行都做了什么。我正在努力使用一些与函数相关的东西(command?argv),因为我不知道如何命名代码的某些部分。见鬼,我都不知道怎么称呼argv——一个函数?命令?变量我知道这是一个模块。但回到正轨: 以下是以下代码: Zed说“argv”是“参数变量”。我的问题是,第三行等号左边的东西叫什么名字? 通俗地说,我的冲动是将单词“script”、“first”等称为变量本身——但这似乎不对,因为根据Zed argv的说法

Zed Shaw的“艰苦学习Python”经常要求您“用英语写出”脚本的每一行都做了什么。我正在努力使用一些与函数相关的东西(command?argv),因为我不知道如何命名代码的某些部分。见鬼,我都不知道怎么称呼argv——一个函数?命令?变量我知道这是一个模块。但回到正轨:

以下是以下代码:

Zed说“argv”是“参数变量”。我的问题是,第三行等号左边的东西叫什么名字?

通俗地说,我的冲动是将单词“script”、“first”等称为变量本身——但这似乎不对,因为根据Zed argv的说法,变量是“参数变量”

我也不认为将它们称为“参数”是正确的;我只从命令行参数的角度阅读过“参数”

“参数”似乎很有可能,因为在练习的标题中提到了它,但是使用“等号”、“等号”、“python”、“argv”、“定义”等组合进行web搜索并不是很有启发性。当你不知道这些东西叫什么时,搜索它们是非常困难的


我非常清楚这个脚本中发生了什么,只是不清楚其中一部分的名称。我非常确定当回答这个问题时,我会拍拍我的额头。

“=”
左边的东西是从右边的变量获取值的变量

鉴于:

script, first, second, third = argv
argv
是一个字符串列表,在本例中包含4项。这些字符串被“解包”并分配给
=
左侧的四个变量

argv
从命令行调用Python程序时获取其值,如下所示:

test.py this is sure cool
在这种情况下,
argv
将包含
['test.py','this','is','sure','cool']
。命令后的这些字符串称为“命令行参数”(参见此)脚本的名称以及所有参数都存储在
argv
中。这是启动脚本时向脚本发送信息的一种方法

在这种情况下,变量将获得以下值:

  script is set to  "this.py"  # the string is in argv[0]
  first to "is"     # argv[1]
  second to "sure"  # argv[2]

因此:

实际上相当于:

  script = argv[0]
  first = argv[1]
  second = argv[2]
  third = argv[3]
只是Python让您可以一下子完成这个任务

请注意,您可以使用适当的索引值按任意顺序提取命令行参数

此机制用于将信息传递给Python脚本。您可以想象运行一个需要输入文件和输出文件的程序。您可以在命令行上提供这些文件,而不是在脚本中硬编码它们。例如

 computeData.py input.txt result.txt

为了回答第一个问题,
argv
sys
模块的一个属性。至于第二个问题,Python的文档没有为赋值表达式的右侧指定名称,但是
script
first
等可以在这个上下文中被称为变量。

有时只键入s比较容易将ome代码导入交互式python提示符,并查看这些东西是如何工作的

虽然sys.argv是一个由Python本身为您定义的列表,但它与您自己定义的任何列表或元组(类似Python的可变和不可变数组类型)并没有太大区别。因此,请尝试自己定义一个并使用它。在声明名为
argv=['123'、'456'、'789'的变量后
如果是列表类型,请尝试将其分配给其他名称:

  anothername = argv
请注意,没有发生任何特殊情况。现在请注意,如果您尝试分配给三个不同的变量,会发生什么情况:

  v1,v2,v3 = argv
argv中的第一个(技术上称为“零”)元素存储在v1中,argv的第二个元素存储在v2中,依此类推


我相信我会将v1、v2、v3称为“变量列表,这些变量将包含过去是列表argv中元素的内容,但我希望将其解压缩并存储在自己的位置。”

>“变量列表,这些变量将包含过去是列表argv中元素的内容,但我希望将其解压缩并存储在自己的位置。”“哈哈!我喜欢它,它有一个戒指。在进一步回顾艰苦地学习Python之后,我开始认为技术术语(如果有)是有价值的。+1,因为有时只需使用交互式解释器就更容易了。但是要挑剔-
argv
是一个列表(不是数组),
v1、v2、v3
更像是一个元组而不是一个列表(虽然它也不是真正的元组,因为
a=(a1、a2、a3);a=sys.argv
不进行解压缩)。正确。本机类型名称为list。我认为语法“a,b,c=x”被称为“tuple unpacking”,即使x是一个列表。我可能不够精确,但在我看来“tuple和list是允许逐项访问的子类型”,因此我(不精确地)将它们都称为数组。我希望我已经进行了编辑,以使含义更清晰。>这些字符串是“未打包”的,并分配给=左侧的四个变量,所以技术术语是value?在阅读了《艰苦学习Python》中的几章之后,我看到Zed将这些变量称为“值”。这听起来正确吗?还是我最好将它们称为变量、参数或列表值?以下是我将使用的术语:在
“=”
的左侧有4个变量。右边是字符串列表。这些字符串分别分配给4个变量中的每一个。即,每个变量都从
argv
的元素中获取其值(字符串)。这有帮助吗?@eric.christopher.scott它们肯定不是值-本上下文中的值是
=
右侧的值(在本例中,由于解包,您可能会说这是
argv
的内容,而不是
argv
本身)。它们只是变量,只是一个变量
 computeData.py input.txt result.txt
  anothername = argv
  v1,v2,v3 = argv