[关闭]
@yanglt7 2018-12-03T06:40:10.000000Z 字数 1504 阅读 654

Python16_模块

Python


在Python中,一个 .py 文件就称之为一个模块(Module)。

最大的好处是大大提高了代码的可维护性。其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括 Python 内置的模块和来自第三方的模块。

使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。点这里查看Python的所有内置函数

为了避免模块名冲突,Python 又引入了按目录来组织模块的方法,称为包(Package)。

每一个包目录下面都会有一个 __init__.py 的文件,这个文件是必须存在的,否则,Python 就把这个目录当成普通目录,而不是一个包。

使用模块

  1. #!/usr/bin/env python3 标准注释,让文件可以在 Unix/Linux/Mac 上运行
  2. # -*- coding utf-8 -*- 标准注释,表示 .py 文件使用的是 utf-8 编码
  3. 'a test module' 表示模块的文档注释,任何模块代码的第一个字符串都被视为模块的文档注释;
  4. __author__='Y-momo' 作者
  5. ipmport sys 导入 sys 模块
  6. def test():
  7. args=sys.argv
  8. if len(args)==1:
  9. print('Hello,world!')
  10. elif len(args)==2:
  11. print('Hello.%s!' %args[1])
  12. else:
  13. print('Too many arguments!')
  14. if __name__=='__main__'
  15. test()

sys 模块有一个 argv 变量,用 list 存储了命令行的所有参数。argv 至少有一个元素,因为第一个参数永远是该 .py 文件的名称,例如:

运行 python3 hello.py 获得的 sys.argv 就是 ['hello.py'];

运行 python3 hello.py Michael 获得的 sys.argv 就是['hello.py', 'Michael]。

作用域

在一个模块中,我们可能会定义很多函数和变量,但有的函数和变量我们希望给别人使用,有的函数和变量我们希望仅仅在模块内部使用。在 Python 中,是通过 _ 前缀来实现的。

类似 __xxx__ 这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如上面的 __author__,__name__ 就是特殊变量,hello 模块定义的文档注释也可以用特殊变量 __doc__ 访问,我们自己的变量一般不要用这种变量名;

类似 _xxx 和 __xxx 这样的函数或变量就是非公开的(private),不应该被直接引用,比如 _abc,__abc 等;

private 函数或变量不应该被别人引用,那它们有什么用呢?请看例子:

  1. def _private_1(name):
  2. return 'Hello, %s' % name
  3. def _private_2(name):
  4. return 'Hi, %s' % name
  5. def greeting(name):
  6. if len(name) > 3:
  7. return _private_1(name)
  8. else:
  9. return _private_2(name)

我们在模块里公开 greeting() 函数,而把内部逻辑用 private 函数隐藏起来了,这样,调用 greeting() 函数不用关心内部的 private 函数细节,这也是一种非常有用的代码封装和抽象的方法,即:

外部不需要引用的函数全部定义成 private,只有外部需要引用的函数才定义为 public。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注