模块原则
一个独立的Python文件就是一模块,在导入模块时,模块中所有没有任何缩进的代码 都会被执行一遍。
开发需求:
在实际开发中,每一个模块都是独立开发的,大多都有专人负责,开发人员通常会在各自负责的模块中增加一些测试代码,仅在模块内测试使用,而被导入到其他模块中不需要执行.
解决方案:
__name__ 属性可以做到,测试模块的代码只在测试情况下被运行,而在被导入时不会被执行。
__name__ 是Python的一个内置属性,记录着一个字符串,如果是被其他模块导入的,__name__ 属性值就是模块名,如果是当前执行的程序 __name__ 属性值是 __main__。
所以对于模块制作中的代码,我们应该进行优化。
# 定义一个全局变量 name = "自定义模块" # 定义一个函数求和 def add2num(a, b): return a + b # 自定义一个人类 class Person(object): pass # 定义一个函数, 用于测试 def test(): # 测试全局变量 print(name) # 测试函数 ret = add2num(10, 20) print(ret) # 测试类 p = Person() print(p) # 解决方案 if __name__ == '__main__': # 调用函数 test()
可以根据__name__变量的结果能够判断出,是直接执行的python脚本还是被引入执行的,从而能够有选择性的执行测试代码。
例子:
# import hm_itcast from hm_itcast import name
模块代码:
# 定义一个全局变量 name = "自定义模块" # 函数 def add2num(a, b): return a + b # 自定义人类 class Person(object): pass # 程序员需要对自己定义的模块需要进行自测 def tt(): print(name) print(add2num(10, 20)) print(Person()) # 执行tt() 是程序员在自测需要执行的代码 # 如果被其他模块导入 那么不应该执行tt() # __name__的数值变化 # 如果直接运行此模块 # __name__ = __main__ # 如果被导入使用的时候 # __name__ = hm_itcast # 判断程序的入口 if __name__ == '__main__': tt()