一、制作模块
在python中,每个python文件都可以作为一个模块,模块的名字就是文件的名字。也就是说自定义模块名必须要符合标识符命名规则。
1.1 定义模块
新建一个python文件,命名为my_module1,并定义testA函数。
# 需求:一个函数 完成任意两个数字的加法运算 def testA (a, b): print(a + b)
1.2 测事模块
当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,开发人员在文件中添加一些测试信息。
列如:
# 需求:一个函数 完成任意两个数字的加法运算 def testA (a, b): print(a + b) # 测试信息 testA(1, 1) # 这种测试信息如果不注释会在调用此模块的文件中运行。
此时,无论是当前文件,还是其他已经导入该模块的文件,在运行的时候都会自动执行testA函数的调用。
解决方法:
# 需求:一个函数 完成任意两个数字的加法运算 def testA (a, b): print(a + b) # 测试信息 # testA(1, 1) # 这种测试信息如果不注释会在调用此模块的文件中运行。 # print(__name__) # __main__ # __name__ 是系统变量,是模块的标识符,值是:如果是自身模块值是__main__,否则是当前模块的名字。 # __main__等于是当前文件中才被运行,其他调用此模块的文件中不被运行。 if __name__ == '__main__': testA(1, 1)
后续测试信息要if __name__ == '__main__' 中添加。
1.4 注意事项
如果使用from .. import .. 或 from .. import * 导入多个模块的时候,且模块内有同名功能。当调用这个同名功能的时候,调用到的是后面导入的模块的功能。
""" 模块2代码 def my_test(a, b): print(a + b) 模块3代码 def my_test(a, b): print(a - b) """ # 导入模块并调用相同名字的功能 from my_module2 import my_test from my_module3 import my_test # my_test调用到的是my_module3的功能 my_test(10, 9)
二、模块定位顺序
当导入一个模块,python解释器对模块位置的搜索顺序是:
1. 当前目录
2. 如果不在当前目录,python则搜索在shell变量PYTHONPATH下的每个目录
3. 如果找不到,python会查看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/
模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。
注意:
1. 自己的文件名不要和已有模块名重复,否则导致模块功能无法使用。
2. 使用 from 模块名 import 功能 的时候,如果功能名字重复,调用到的是最后定义或者导入的功能。
三、拓展
名字重复:
# 问题:import 模块名 是否担心 功能名字重复的问题? -- 不需要,每次调用功能都是: 模块名 . 功能名 import time print(time) # <module 'time' (built-in)> time = 1 print(time) # 1 # 问题: 为什么变量也能覆盖模块? -- 在python语言中,数据是通过 引用 传递的。大概意思后者覆盖前者
标签:__,python,制作,testA,模块,print,my From: https://www.cnblogs.com/yz-b/p/16997509.html