簡體   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