练习 13 参数,解包,变量

    输入这个程序,然后我会详细解释:

    ex13.py

    第一行我们进行了 “import”(导入),这能让你把 Python 功能库中的功能(features)添加到你的脚本中。Python 会问你你想用什么,而不是一次把所有的功能都给你。它会让你的程序很小,但是它同时也可以为其它阅读你代码的程序员提供参考。

    这个 argv 是 “argument variable” ,一个在编程语言中非常标准的名字,你会在其它很多的语言中看到它的使用。当你运行 Python 脚本的时候,这个变量(variable)保存了你传给 Python 脚本的参数(argument)。在这个练习中,你会做更多相关的练习,看看会发生什么。

    第三行“解包”(unpacks)了 argv ,而不是保留所有的参数,它分成了四个变量:script, first, second, 以及 third 。这可能看起来很奇怪,但是“解包”这个词可能是对这个操作的最好定义,就好像在说:“把 argv 里面的东西解包,然后按顺序分配给从左到右每一个变量。最后就像平常一样把它们打印出来即可。

    我在这儿把它们叫做 features (就是你导入进来让 python 做更多事情的东西),但是很少有人叫它们 features。我用这个名字只是因为我想让你在专业术语之外思考它们的真正含义。不过在你继续学习之前,你需要知道它们真正的名字:modules (模块)。

    像这样运行这个程序,前面是你要传递的命令行参数:

    练习 13 会话

    当你做一些不同参数的运行时,你会看到:

    练习 13 会话

    事实上你还可以把 first2nd3rd 替换成任何你想替换的东西。如果你没有正确运行,你会收到这样的报错:

    练习 13 会话

    • 试着给你的脚本三个以内的参数,看看你会收到什么样的报错,你是否能解释它。
    • inputargv 结合起来创建一个脚本,从用户那里获取更多 input 。别想得太难,就用 来获取一些东西,再用 input 从用户那里获取一些东西。
    • 记住模块给我们一些特征,记住它叫模块(modules),我们之后会用到。

    当我运行的时候我收到了 ValueError: need more than 1 value to unpack.还记得我说过,学习编程的一项重要技能就是注意细节。如果你看了“你会看到”那部分,你就会看到我是如何在命令行上运行有参数的脚本的,你应该准确按照我做的来。

    argvinput() 之间的区别是什么? 区别取决于用户在哪被要求输入,如果是在命令行,就用 argv。如果你想让它们在程序已经运行的情况下用键盘输入,那就用 input()

    命令行参数是字符串吗?是的,它们是以字符串的形式进来的,即使你在命令行输入的是数字。你可以用 int() 把它们转化成数值,就像 int(input())

    你如何使用用命令行?” 你应该已经学过命令行的使用了,现在应该用得很 6 了。但是如果你还没有学,先去附录 A 学习命令行速成课程。

    我不知道怎么把 argvinput() 结合在一起。 别把它想得太难。就在脚本最后加两行,用 input() 获取一些东西,再打印出来。然后试着用更多方式在同一个脚本中使用这两样东西。

    为什么我不能这样用:input('? ') = x ? 因为它写反了,按我的要求写,就能运行。