从另一个文件导入一个写好的函数,却因为这个小细节,造成了困扰
首先,新建两个.py文件。
filename: import_func_test.py,创建一个用来导入的函数:
def fun(x=1):
print("我被执行了!", x)
return x
print("测试一下函数")
fun()
filename: import_test.py,导入这个函数:
from import_func_test import fun
print("------")
print(fun(2))
运行import_test.py,结果是这样:
测试一下函数
我被执行了! 1
------
我被执行了! 2
2
[Finished in 0.2s]
w(゚Д゚)w
问题就出在import_func_test.py中多出来的:print语句和fun()函数调用
当初写import_func_test.py时,为了测试写好的函数,就直接调用这个函数测试了一下,后来也没有删掉,然后在其它文件中导入使用时,就发生了这个诡异的现象:在import阶段,import_func_test.py中的可执行语句先默认执行了一次。
如果将import_func_test.py中的print 、fun()放入if __name__ == "main":下:
def fun(x=1):
print("我被执行了!", x)
return x
if __name__ == "__main__":
print("执行前先print一下")
fun(5)
运行import_test.py,结果变成了这样:
------
我被执行了! 2
2
[Finished in 0.2s]
所以,在import_func_test.py中存在可执行语句、调用函数等情况下,当其它文件import这个文件/模块时,import过程会将模块先执行一遍,那么这些遗留的可执行语句、调用函数就会被运行一次。
安全的方法,就是使用这个:
if __name__ == "main":
xxx
xxx
...
name 是当前模块名,当模块被直接运行时模块名为 main 。
当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行。
好尴尬~%?…,# *'☆&℃$︿★?
在Python中,当从一个包含可执行语句的文件导入函数时,这些语句会在导入时执行。一个例子展示了如何避免这种意外行为,通过检查`__name__`属性来确保只有在模块作为主程序运行时才执行特定代码。
952

被折叠的 条评论
为什么被折叠?



