为何导入Python文件中的函数时整个文件会自动执行?如何解决?
解决导入模块时仅执行目标函数,不运行模块内其他代码的方法
问题核心是:Python在导入模块时,会执行模块内所有顶层代码。你需要把demos_tkinter.py中不想在导入时运行的代码(Tk实例创建和mainloop())放到特定判断块里,仅在直接运行该模块时才执行。
修改demos_tkinter.py代码
将原代码里的Tk实例创建和mainloop()代码包裹在if __name__ == "__main__":判断中:
from tkinter import * def print_something(): print("hello") # 仅在直接运行当前模块时才执行以下代码 if __name__ == "__main__": roots=Tk() roots.mainloop()
原理说明
- 当你直接运行
demos_tkinter.py时,Python会把模块的__name__变量设为"__main__",此时判断条件成立,Tk窗口代码会执行。 - 当你从
intro_to_tkinter.py中导入demos_tkinter模块时,模块的__name__变量会被设为模块名"demos_tkinter",判断条件不成立,Tk窗口代码就不会运行。
保持intro_to_tkinter.py不变
你的intro_to_tkinter.py不需要修改,直接运行它就只会执行print_something()函数,而不会触发demos_tkinter.py里的Tk窗口代码:
from tkinter import * from demos_tkinter import print_something root=Tk() root.configure(bg="#000000") print_something() root.mainloop()
内容的提问来源于stack exchange,提问作者Nirbhik Dhakal
相关产品推荐
相关产品推荐

