【问题标题】:How can I make the imported modules use the same objects as my main?如何使导入的模块使用与我的主要模块相同的对象?
【发布时间】:2014-07-08 02:00:59
【问题描述】:

我的设置是这样的。 我有一个engine.py,它定义了我在外部script.customextension 中编写和修改的许多变量和自定义函数。我正在使用imp.load_source('script', 'script.customextension') 导入我的外部脚本,但是当我这样做时,无法从外部模块访问所有变量和函数。

然后我尝试将其写为外部脚本中的第一行:from engine import *,但随后我将重新实例化所有对象并丢失已创建的我需要访问的对象。

以下是粗略的简化

文件engine.py

a = 10

def f(myval):
    global a
    a = myval
    print(a)

if __name__ == '__main__':
    imp.load_source('script', 'script.ext')

和文件 script.ext 有这一行

f(20)

运行engine.py时的结果:

NameError: name 'f' is not defined

我想要的是:

20

【问题讨论】:

    标签: python import namespaces


    【解决方案1】:

    我发现这个解决方案可以用来代替导入模块(见exec

        _file = open('script.ext')
        for line in _file:
            exec(line)
    

    【讨论】:

      【解决方案2】:

      这里很丑:

      import __main__ as main
      
      main.f(20)
      

      【讨论】:

      • 谢谢,但我找到了另一种适合我的方法
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-29
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      • 1970-01-01
      相关资源
      最近更新 更多