模块
- 一个
.py
文件就称之为一个模块(Module)
# 第1行和第2行是标准注释,第1行注释可以让这个hello.py文件直接在Unix/Linux/Mac上运行,第2行注释表示.py文件本身使用标准UTF-8编码;
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 表示模块的文档注释,任何模块代码的第一个字符串都被视为模块的文档注释
"""a test module"""
# 使用__author__变量把作者写进去,这样当你公开源代码后别人就可以瞻仰你的大名
__author__ = 'Dear.Michael Liao'
import sys
def test():
args = sys.argv
if len(args)==1:
print('Hello, world!')
elif len(args)==2:
print('Hello, %s!' % args[1])
else:
print('Too many arguments!')
if __name__=='__main__':
test()
导入模块
import sys # 导入模块sys,就有变量sys指向该模块,利用sys这个变量,就可以访问sys模块的所有功能
from 模块 import 函数
sys
模块有一个argv
变量,用list
存储了命令行的所有参数。argv
至少有一个元素,因为第一个参数永远是该.py
文件的名称:python3 hello.py
得到sys.argv ==> ['hello.py']
;python3 hello.py icessun
得到sys.argv ==> ['hello.py','icessun']
在命令行运行
hello
模块文件时,Python解释器把一个特殊变量__name__
置为__main__
,而如果在其他地方导入该hello
模块时,if
判断将失败,因此,这种if
测试可以让一个模块通过命令行运行时执行一些额外的代码,最常见的就是运行测试。# 该文件作为模块导入的时候,if条件失效 hello.py 模块 if __name__ == '__main__': test() import hello >>> hello.test() Hello, world!
作用域
因为Python并没有一种方法可以完全限制访问private函数或变量,但是,从编程习惯上不应该引用private函数或变量。虽然是私有变量,但不是说不一定不能访问,只是说不应该被直接访问。
_arg 或者 __arg
,变量前缀实现变量私有化;类似_xxx
和__xxx
这样的函数或变量就是非公开的(private),不应该被直接引用正常的函数和变量名是公开的(public),可以被直接引用
def _private_1(name): return 'Hello, %s' % name def _private_2(name): return 'Hi, %s' % name def greeting(name): if len(name) > 3: return _private_1(name) else: return _private_2(name)
- 在模块里公开
greeting()
函数,而把内部逻辑用private
函数隐藏起来了,这样,调用greeting()
函数不用关心内部的private
函数细节,这也是一种非常有用的代码封装和抽象的方法 - 外部不需要引用的函数全部定义成private,只有外部需要引用的函数才定义为public。
- 在模块里公开