# 在Python中,一个.py文件就称之为一个模块(Module) # 1.最大的好处是大大提高了代码的可维护性。 # 2.可以被其他地方引用 # 3.python内置的模块和来自第三方的模块 # 4.使用模块还可以避免函数名和变量名冲突 # 5.同样,Python也有包(Package),同名不同包引用是也不会冲突。 # 每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是我们定义的包名。 # 类 似这种结构 # mypackage # ├─ web # │ ├─ __init__.py # │ ├─ utils.py # │ └─ www.py # ├─ __init__.py # ├─ abc.py # └─ utils.py # 自己创建模块时要注意命名,不能和Python自带的模块名称冲突。例如,系统自带了sys模块,自己的模块就不可命名为sys.py,否则将无法导入系统自带的sys模块。 # ---------------------------------------------------------------------- # sys模块为例写一个hello 模块 # !/usr/bin/env python3 # -*- coding: utf-8 -*- ' a test module ' # 模块的文档注释 __author__ = 'shaozhiqi' # 把作者写进去 import sys # 导入sys模块 def test(): args = sys.argv # argv变量,用list存储了命令行的所有参数 # argv至少有一个元素,因为第一个参数永远是该.py文件的名称 if len(args) == 1: print('Hello, world!', args[0]) elif len(args) == 2: print('Hello, %s!' % args[1]) else: print('Too many arguments!') if __name__ == '__main__': # 把一个特殊变量__name__置为__main__ test() # 上面两行的作用 : # 当 .py 文件被直接运行时,if __name__ == '__main__' 之下的代码块将被运行; # 当 .py 文件以模块形式被导入时,if __name__ == '__main__' 之下的代码块不会被运行。 # 场景:就是在当作为引入模块时我们会用文件名.test调用方法,当然不需要执行这两行。 # 执行此py文件: Hello, world! D:/workPython/pythonLearning/pyc/codeModule20.py # --------------------------------------------------------------------------------- # 作用域 # 1.类似__xxx__这样的变量是特殊变量,可以被直接引用,但是有特殊用途, # 比如上面的__author__,__name__就是特殊变量,hello模块定义的文档注释也可以用特殊变量__doc__访问,我们自己的变量一般不要用这种变量名; # 2.普通的定义入: abc,x123,PI 是public的 # 3._xxx和__xxx这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc,__abc等; # Python并没有一种方法可以完全限制访问private函数或变量,但是,从编程习惯上不应该引用private函数或变量。 # private的用法类似java,对内公开、对外隐藏。 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)