【问题标题】:Learn Python The Hard Way Exercise 41 - sys.argv [duplicate]艰难地学习 Python 练习 41 - sys.argv [重复]
【发布时间】:2014-02-18 10:09:47
【问题描述】:

我是程序员新手,我正在按照自己的方式完成练习。在练习 41 中,我有点困惑 (http://learnpythonthehardway.org/book/ex41.html)。

我不明白第 n 行。 25:

if len(sys.argv) == 2 and sys.argv[1] == "english":

我已经尝试查找 sys.argv 的功能,但我似乎无法理解它。据我了解 - sys.argv 是命令行参数列表,但是我不明白脚本中这些参数的位置。因此我不明白分支。

我知道“len”计算该列表中的项目数,这意味着必须至少有三个参数,并且列表中的第一项必须包含字符串“english”。我只是不明白这个特定脚本中的参数是如何声明的。

我使用的是 Python 2.7

【问题讨论】:

  • 我必须恰好有两个参数。
  • 我知道如果我使用“english”参数运行脚本,我会得到反向函数,但是脚本中没有定义参数。还是我只是在 IF 分支中分配它?
  • next 行仅在if 条件为True 时执行。它设置一个布尔标志,其余代码根据该标志改变行为。 sys.argv 由 Python 在解释器启动并查看命令行上使用了哪些参数时设置。
  • 感谢您将我指向另一个线程。它解释了很多。

标签: python python-2.7 command-line-arguments


【解决方案1】:

那些参数位于脚本中。它们被称为命令行参数,因为它们是用户在从命令行调用脚本时提供的:

python oop_test.py english
                 # ^ sys.argv[1]
     # ^ sys.argv[0]

所以你的代码首先检查是否提供了两个参数(不是“至少三个”),然后第二个(Python 是从零开始的,所以第一项是argv[0])是@987654324 @。

argv 中的第一项始终是脚本名称; see the docs.

【讨论】:

  • 哦,我现在明白了……我终于明白了。但是如果有 > if len(sys.argv) == 2 它必须是三个项目对吗?因为 sys.argv[0] 是脚本名称,sys.argv[1] 是“英文”,但至少现在我知道这个列表是在运行脚本之前在命令行中创建的。这就是为什么我很困惑...
  • 否,虽然索引是从零开始的(01),len 返回项目数(比最大索引大一)不是 i> 最大的索引。
  • 该死的,我很确定我已经阅读了文档,我必须从所有阅读中筋疲力尽,当然 LEN 就是这样工作的。谢谢你提醒我。现在我需要弄清楚脚本的其余部分。
猜你喜欢
  • 1970-01-01
  • 2015-05-01
  • 2013-04-06
  • 2011-12-04
  • 2016-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-16
相关资源
最近更新 更多