毕竟内置标准模块的功能有限,开发人员经常需要自定义函数,此时可以把函数组织到模块中,其他程序只需导入便可以引用模块中定义的函数,这种做法不仅使程序具有良好的结构,而且增加了代码的重用性。
在Python中,每个.py文件都可以作为一个模块,模块的名字就是文件的名字,接下来演示如何自定义模块,假设mymodule.py文件中包含2个函数,具体如下所示:
# 输出信息
def output(info):
print(info)
# 求和
def add(num1, num2):
print(num1 + num2)
如果创建的模块mymodule.py与1.py保存在同一目录下,此时可以通过导入该模块便可引用其中包含的函数,如下所示。
1 import mymodule # 导入mymodule模块
2 mymodule.output('人生苦短,我用Python') # 调用output()函数
3 mymodule.add(1, 2) # 调用add()函数
运行结果如下图所示。

在上例中,1.py中导入mymodule模块并引用其中包含的函数。
在实际开发中,编程者自定义完模块后,为了保证模块编写正确,一般需要在模块中添加测试信息,具体如下所示:
# 输出信息
def output(info):
print(info)
# 求和
def add(num1, num2):
print(num1 + num2)
# 测试
output('简书作者~隼与鱼')
add(3, 5)
此时,若执行1.py代码,则运行结果如下图所示。

从程序运行结果可发现,1.py执行了mymodule.py中的测试代码,这是不期望出现的结果,为了解决上述问题,Python提供了一个name属性,它存在于每个.py文件中,当作为模块导入使用时,模块name属性值为模块文件的主名,当作为顶层模块直接执行时,name属性值为'main'。
接下来修改mymodule.py文件,使其被作为模块导入时不执行测试代码,具体如下所示:
# 输出信息
def output(info):
print(info)
# 求和
def add(num1, num2):
print(num1 + num2)
# 测试
if __name__ == '__main__':
output('扣丁学堂|好程序员特训营')
add(3, 5)
修改完成后,再次执行1.py代码,则运行结果如下图所示。

从程序运行结果可发现,执行1.py代码时,程序并没有执行mymodule模块中的测试代码。
网友评论