Exercise 13: 参数,解析,变量

原文链接:http://learnpythonthehardway.org/book/ex13.html

       在这次练习中我们将介绍一个新的向一个脚本中传递变量的方法(脚本就是你.py文件的别称)。你应该知道了输入了 python ex13.py 来运行 ex13.py文件了吧?这个命令的ex13.py 的这部分就是被称作“参数”。现在我们要做的就是写一个也可以介绍参数的脚本。

输入下面这个程序,我将详细的讲解这个例子:

from sys import argv

script ,first ,second ,third = argv

print "The script is called:" , script
print "Your first variable is:", first
print "Your second variable is:", second
print "Your third variable is:", third
       在第一行我们有一个“import”语句。这是用来让你从Python功能集中来添加功能到你的脚本中。与其把所有功能都一次性给你,Python更喜欢问你打算用什么功能。这样就可以使得你的程序尽量精简,而后面的程序员看到你的代码的时候,这些“import”可以作为提示,让他们明白你的代码用到了哪些功能。

       argv 就是“参数变量“ ,一个你也可以在许多其他编程语言中写的程序中找到的非常标准命名术语。当你运行Python脚本的时候这个变量加载了你传进脚本的参数值。通过后面的练习你将对它进一步了解。

       第三行 是对 argv 的”解析“,与其把所有变量放到一个变量中,我们把这个分成四个分别放入: script ,first ,secon 和 third四个变量中。这可能看起来有些奇怪,但是”解析“这个词可能是最适合来描述这种操作的含义了。它的意思就好比:不管你从 argv 中拿到什么,解析它 ,并把所有解析到的值按顺序赋给左边的所有变量。

       接下来就是来正常打印出它们的结果。

等一下!“功能”还有另一个名字

       我称其为“功能”(其实之前你使用import来使得Python可以做更多的事情但这些只是小事情罢了)但是事实上没有其他人称其为功能。我之所以使用这个词的原因是因为我要在没有用专业术语的情况下来告诉它是什么。在你继续往下学习之前,你需要知道它真正的名字:modules(模块)。
       从现在开始我们将使用的导入模块都称为“功能”,我将会像这样说,“你想导入 sys 模块”。其他程序员也可能称其为“libraries(函数库)",但是在这里我们还是使用模块这个称呼吧。

输出结果如下:


像下面这样运行脚本(你必须传入三个命令行参数):
c:\>python ex13.py first 2nd 3rd
The script is called: ex13.py
Your first variable is: first
Your second variable is: 2nd
Your third variable is: 3rd
下面这些是当你输入不同参数运行时输出不同的结果示例:
c:\>python ex13.py stuff things that
The script is called: ex13.py
Your first variable is: stuff
Your second variable is: things
Your third variable is: that

c:\>python ex13.py apple orange grapefruit
The script is called: ex13.py
Your first variable is: apple
Your second variable is: orange
Your third variable is: grapefruit
实际上你可以用任何你想要的三样东西去替代 "first" ,"2nd" 和"3rd"

如果你运行不正确,那么你将得到像下面这样的错误:
c:\>python ex13.py first 2nd
Traceback (most recent call last):
  File "ex13.py", line 3, in <module>
    script ,first ,second ,third = argv
ValueError: need more than 3 values to unpack
出现这种错的情况是当你没有在命令行中输入足够的参数(在这里你只输入了 first 2nd ,还缺少一个参数)的时候发生的。注意到当你只给了 first 2nd两个参数时,给出的错误提示中”need more than 3 values to unpack“就是告诉你输入的参数个数不够。

研究训练:


1、试着输入少于三个参数来运行你的 脚本,看看你会得到什么错误提示?看看你是否能解释这个错误的含义。
2、写一个比示例中更少参数和一个比示例中更多参数的脚本,你得确保给你解析的变量名取个恰当的名字。
3、结合 raw_input 和 argv 来写一个可以获取更多输入的脚本。
4、记住是模块赋予了你使用的这个功能,模块,模块。记住这个称呼我们之后还要用到它。

学生遇见的常见问题:


当我运行示例脚本时出现下面这个错误:ValueError:need more than 1 value to unpack。
答:记住一个重要的技巧就是注意细节问题。如果你看到“输出结果”那一栏的话你会看到我是怎样输入参数来运行脚本的。你应该参照我的方式来操作。

raw_input() 和 argv 有什么区别?
答:它们的区别就是用户被要求在哪里输入。如果你的脚本在命令行中输入参数,那么你应该用 argv ,如果在脚本运行的过程总需要用键盘输入参数时,你应该使用 raw_input()。

命令行参数是字符串吗?
答:是的,它们作为字符串输入进来,即使你在命令行长输入数字也一样作为字符串处理。当然你可以像使用 raw_input() 一样来用 int() 强制转换成整型数据。

如何使用命令行?
答:你本应该到现在可以熟练的使用它了啊,但是如果你在这个阶段还需要学习这个的话,那么你去附录A阅读《The Command Line Crash Course》这本我写的书吧。

我不知道怎么组合 argv 和 raw_input() 来使用。
答:你不要想的太复杂了。你只要在这个示例脚本的最后面加上两行用 raw_input() 结束用户输入并输出就行了。从这里开始就有更多的方式在同一个脚本中使用这两种方法来接受用户输入了。

为什么我不可以使用这个:raw_input(‘?') = x?
答:这就回到这个表达式是如何有效的问题了,你只要按照我教的方法来做就不会出现这样的问题了。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值