繁体   English   中英

如何在函数中执行“导入*”?

[英]How can I perform `import *` from within a function?

我有以下标准导入过程:

from ROOT import *

由于ROOT处理命令行选项和参数的方式,因此需要执行以下类似操作,以避免搞乱脚本的命令行解析:

argv_tmp = sys.argv
sys.argv = []
from ROOT import *
sys.argv = argv_tmp

我需要在许多脚本中执行此操作。 此操作可能会更改,或者可能会发现有更好的方法,所以我想将此过程集中在某个导入模块提供的单个功能中,以便将来轻松更改过程。

def import_ROOT():
    # magic

import os
import sys
import_ROOT()
import docopt

如何从函数中导入ROOT模块,以使脚本操作的结果与上述的from ROOT import *过程相同?

由于在python中如何实现局部变量,因此您无法执行此操作。 而且由于您不知道所有可能导入的变量,因此无法将它们声明为全局变量。

至于为什么不能在函数中导入未知的本地人。 这是因为python在编译时会建立可能存在的所有可能的本地变量(直接分配给全局变量或未声明为全局变量或非本地变量的任何局部变量)。 这些局部变量的空间在与函数的每次调用关联的数组中进行。 然后,通过数组中的索引而不是其名称来引用所有本地人。 因此,解释器无法为未知的本地人留出更多空间,也无法在运行时知道如何引用它们。

我相信这里已经有一个类似的问题:

Python:如何从函数进行全局导入

例:

def example_function():
    global module
    import module

这可能会错过各种极端情况,但这是一个开始:

def import_ROOT():
    import ROOT
    globals().update(ROOT.__dict__)

强制性免责声明:如果要导入*,则可能是错误的。 但我猜可能存在以下情况:import *是次要的邪恶。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM