有关文件导入:
- 一个独立的python文件就是一个模块
- 在导入文件时,文件中 所有没有任何缩进的代码都会被执行一遍
- 在实际开发中,开发人员通常会在模块下方增加一些测试代码,测试代码是仅在模块内使用,而被导入到其他文件中不需要执行
这里就需要知__name__
属性
__name__
属性可以做到,测试模块的代码只在测试情况下被运行,而在被导入时不会被执行__name__
时python的一个内置属性,记录着一个字符串- 如果是被其他文件导入的,
__name__
就是模块名 - 如果是当前执行的程序,
__name__
是__main__
例如:在测试情况下(没有导入到其他文件中),代码:
def say_hello():
print("hello")
print(__name__)
print("我是小米")
say_hello()
运行结果为:
将其导入到opp_test.py中后,代码如下:
import opp
print("-" * 50)
运行结果为:
那要怎么做才能让对模块测试的代码,只有在执行这个模块时,才会被运行???
- 我们只需要判断
__name__
这个属性,如果__name__
是__main__
,就说明我们现在在执行这个模块 - 否则,则是在导入到其他文件中
所以我们可以加一条if语句判断__name__
是__main__
,代码如下:
def say_hello():
print("hello")
if __name__ == "__main__":
print(__name__)
print("我是小米")
say_hello()
我们运行一下这个模块,看看能否进行测试,运行结果如下:
可以得出:是可以对该模块进行测试的
那么,此时我们再进入到测试导入的文件,再看看导入这个模块会不会再运行模块的测试代码:
import opp
print("-" * 50)
运行结果如下:
可以得出:并不会将模块测试的代码执行了
在很多python文件中都会看到一下格式的代码:
#导入模块
#定义全局变量
#定义类
#定义函数
#在代码的最下方
def main():
#...
pass
#根据__name__判断是否执行main代码
if __name__ == "__main__":
main()
所以我们也要按照这样的格式来开发代码