今天我们来学习写第一个Python程序。
目标:从命令行传入一个参数,比如人名,然后打印出欢迎信息。
我们大学期间都学过C语言或C++。那先来想想如果用C++该如何实现? 在C++中,命令行传参数是用char * argv[],即字符串的指针的数组。打印是用cout输入输出流。下面是C++实现的代码。
#include <iostream>
using namespace std;
int main(int argc, char *argv[]){
cout << "hello " << argv[1] << "!" << endl;
return 0;
}
编译命令 g++ -o hello hello.cpp
,编译后生成可执行文件hello
。
运行命令 ./hello bill
,终端里输出hello bill! 。
所有的编程语言都只是思想或逻辑的描述,所以不同语言之间肯定有相同之处。我们用对比的方法来学习第一个Python程序。下面是Python的实现代码。
#!/usr/bin/env python
import sys
def main(argv) :
print("hello " + argv[1] + "!")
if __name__ == '__main__' :
main(sys.argv)
第1行:#!/usr/bin/env python用来指定执行本脚本所用的软件。是这Linux、Unix脚本的共同特性,与Python无关,Shell、Perl等其它脚本语言都有。操作系统先读取脚本的第一行,来决定用哪个软件来执行脚本,不依赖文件的后缀名。因此Linux中的脚本可以不带用后缀名。通常好的编程习惯是加上特定的后缀名,如Python加py,Perl加pl。
第3行:import sys类似C++的#include语句,用来包含(准确点叫导入)库文件。sys是与系统相关的库,包括argv、stdin、stdout等。我们这个例子里用到了argv,所以需要导入sys库。
第5行:def main(argv) : 定义一个函数。def是定义函数的关键字,main是函数名,圆括号里定义了函数参数。这个例子里定义了一个名叫main的函数,函数有一个参数argv。 我们注意到第5行的最后有一个冒号“:”,这是Python语言所特有的标记,相当于C++的大括号{},表明一个层次关系。
第6行:print("hello " + argv[1] + "!")是调用python语言内置的函数print()来向终端(屏幕)打印信息。括号里的“+”的作用是字符串的拼接,其中argv[1]是数组argv的第1个元素(从0开始计数)。
第8行:if __name__ == '__main__' : 意思是判断当前模块的名字是不是'__main__',如果是则执行后面的语句,如果不是则忽略后面的语句。一般情况下__name__的值总是等于'__main__'。只有一种例外的情况,当我们写的脚本被当作库文件导入到其它脚本时,__name__等于我们的脚本文件名。例如,我们这个脚本名叫hello.py,被导入到其它脚本时,__name__等于hello。
当然现在觉得复杂不好理解没有关系,照着写就行了。等以后学习写库文件的时候再深入学习。
第9行:main(sys.argv)调用了上面自定义的main()函数,并把命令行参数的字符串数组sys.argv传入main()函数。
方法一:
chmod +x hello.py
./hello.py bill
方法二:
python hello.py bill
结果输出: hello bill!
我们来总结一下Python脚本的特点:
"我的第一个Python程序"介绍了一个较规范的Python脚本的例子,并且跟C++语言作了对比。希望大家对文章末尾的总结多看几遍,慢慢体会。
亲自写一遍这个hello.py脚本,并在电脑上执行一下。