模块的格式
如果我们想定义模块,可以按照以下格式写
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
' a test module'
__author__='guaju'
解释以下:
第一行:是注释,但是有用,这个注释可以让当前的.py文件直接在Unix/Linux/Mac上运行
第二行:也是注释,表示当前.py文件使用标准utf-8编码
第三行:空行
第四行:是一个字符串,表示模块的文档注释,任何模块代码的第一个字符串都被视为模块的文档注释
第五行:空行
第六行:作者
这是python的标准文件模板,照做就可以了。
使用模块
前期我们也使用过,直接用import 模块名就好了
python内置了很多模块:sys functools Iterator等
比如我们使用sys模块
import sys
我们先看一个简单的示例,使用了sys模块的一些变量
#! /usr/bin/env python3
# -*- coding:utf-8 -*-
‘first use module’
__author__='guaju'
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')
我们来看下使用示例
将写好的代码保存到 “modlue.py”文件内
然后执行命令行中的方法,我们写的“module.py”模块就能够检测 我们输入命令行中所有的参数了
示例中一次输入了 一个、两个、三个参数
故输出了三种结果
需要我们特别注意的是,我们最后边的代码
if __name__=='__main__':
test()
这两行代码的意思是“当我们在自己执行自己的模块时,则会调用test()方法,如果是其他地方引入了我们的‘module模块,则不会被调用’”
因为我们在执行“module.py”模块时,python解释器会把我们模块中的特殊的变量
__name__
置为
__main__
而在别的地方引入‘module.py’模块则不会
我们来看从别的地方引入‘module.py’模块会不会打印
当然了,如果我们想调用这个方法,直接用就好了
作用域
即函数及变量的可使用范围
在python中,通过""即单下划线或者“_”双下划线来表示不应该外部引用,即类似于java中的private
为什么有作用域?
因为不想或者不应该让外界知道某个函数的内部逻辑或者变量
我们来看一个例子就明白了
def _private1(name):
return 'hello %s' %name
def _private2(name):
return ‘hi %s’ %name
def welcome(name):
if len(name)>3:
private1(name)
else:
private2(name)
上边的例子,我们通过定义_private1,_private2来定义了私有的方法,仅仅对外暴露公共的welcome方法,调用welcome的时候不需要考虑内部的细节,这是一种非常有用的代码封装和抽象的方法。
原则:外部不需要引用的函数全部定义成private,只有外部需要引用的函数才定义成public。