从模块获取单个变量和单个函数而不执行模块?

时间:2014-05-15 21:42:06

标签: python variables import

我是python的新手,所以请原谅我。

我有一个模块: beep.py ,其中包含一个变量: p (包含字符串)和功能: ps 。我需要从模块中访问这两个模块: boop ,并在那里使用它们。

我的问题是,如果我尝试在 boop 中编写import beep,那么 beep 会运行所有代码。有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:2)

Python在导入模块时执行所有顶级指令。可以导入的表现良好的模块应限制它们对顶级代码的作用。 - 他们可以在导入时运行代码,但不应该有副作用。通常使用if __name__ == '__main__'惯用法来创建一个可以作为脚本和导入模块运行的python模块(参见示例)。

如果import beep导致问题,那么它不是设计为导入的,或者写得不好而需要修复。

print 'i always run'

def fctn():
    print 'i run when called'

if __name__ == '__main__':
    print 'i run if called as a script but not if imported as a module'

答案 1 :(得分:0)

Python总是评估您导入的文件,因此如果您在函数或类之外有一些代码,它将被执行。正如tdelaney所述,您可以使用

保护导入的文件
if __name__ == '__main__':

我在这里创建了完整的示例:https://gist.github.com/carlosvin/d9a1eb978fac226dbbe9