我需要从另一个运行其中的东西的python文件中导入一个函数,但是当我导入该函数时,它运行整个代码而不是仅导入我想要的函数。反正只有从另一个.py文件导入一个函数而不运行整个代码?
答案 0 :(得分:15)
在another.py
中,将您不希望运行的代码移动到仅在明确调用脚本运行而不是仅导入
def my_func(x):
return x
if __name__ == '__main__':
# Put that needs to run here
现在如果你在your_script.py
,你可以导入它,它就不会运行
from another import my_func
my_func(...)
答案 1 :(得分:2)
您可以将相关功能移动到另一个文件并将其导入到您的文件中。
但是你在导入时运行所有东西这一事实使我认为你需要将导入模块中的大部分内容移动到函数中,并且仅在需要时使用主要防护来调用它们。
def print_one():
print "one"
def print_two():
print "two"
def what_i_really_want_import():
print "this is what I wanted"
if __name__ == '__main__':
print_one()
print_two()
而不是你可能拥有的东西,我想这似乎是
print "one"
print "two"
def what_i_really_want_import():
print "this is what I wanted"
使用主保护功能在导入时不会执行任何功能,但如果需要,仍然可以调用它。如果名称 ==“主要”真的意味着“我是否从命令行运行此脚本?”在导入时,if条件将返回false,因此不会发生print_one(),print_two()调用。
将一些内容留在脚本中以便在导入时执行是有充分理由的。其中一些是常量,您希望自动进行初始化/配置步骤。拥有模块级变量是实现单例的一种优雅方式。
def print_one():
print "one"
def print_two():
print "two"
time_when_loaded = time.time()
class MySingleton(object):
pass
THE_ANSWER = 42
singleton = MySingleton()
但总的来说,不要在加载时留下太多的代码来执行,否则你最终会遇到这些问题。
答案 2 :(得分:1)
在你要导入的另一个python脚本中,你应该把所有需要执行的代码放在以下if块中运行脚本 -
if '__main__' == __name__:
仅当将该python文件作为脚本运行时,__name__
变量才为__main__
。导入脚本时,此if条件中的任何代码都不会运行。
答案 3 :(得分:0)
# How to makes a module without being fully executed ?!
# You need to follow below structure
"""
def main():
# Put all your code you need to execute directly when this script run directly.
pass
if __name__ == '__main__':
main()
else:
# Put functions you need to be executed only whenever imported
"""
答案 4 :(得分:-8)
1.在编辑器中打开 2.找到定义 3.复制粘贴老式的
最简单的解决方案有时候是最脏的。