4
今天我爲自己寫了一個「別名導入函數」,因爲我需要編寫一個腳本來爲不同的python文件進行變量值檢查。爲什麼函數中的globals()不能更新交互式shell中的變量?
# filename: zen_basic.py
import importlib
def from_module_import_alias(module_name, var_name, alias):
""" equal to from module import a as b """
agent = importlib.import_module(module_name)
globals()[alias] = vars(agent)[var_name]
奇怪的是,如果我啓動一個Python交互式shell,我不能通過使用這個函數導入東西。但通過使用它的功能以外的內容,它可以工作。
>>> from zen_basic import *
>>> module_name = 'autor'
>>> var_name = 'food'
>>> alias = 'fd'
>>> from_module_import_alias(moduele_name, var_name, alias)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'moduele_name' is not defined
>>> from_module_import_alias(module_name, var_name, alias)
>>> fd
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'fd' is not defined
>>> agent = importlib.import_module(module_name)
>>> globals()[alias] = vars(agent)[var_name]
>>> fd
'cake'
>>>
我做了3個實驗後:
-
- 做
python -i test.py
import zen_basic
在交互shell- 通話
from_module_import_alias
功能,失敗了。
- 做
-
- 做
python -i zen_basic.py
- 通話
from_module_import_alias
功能,成功。
- 做
-
- 附加代碼
import zen_basic
並調用from_module_import_alias function
到test.py
- 做
python -i test.py
,成功
- 附加代碼
那是什麼,直接使用from_module_import_alias
功能在Python交互shell的原因失敗了嗎?