[英]What are `globals` and `locals` parameters in Python __import__ function for?
Python文檔中有__import__
的一部分,我不明白:
__import__(name[, globals[, locals[, fromlist[, level]]]])
該函數導入模塊
name
,可能使用給定的globals
和locals
globals
來確定如何解釋包上下文中的name
。 標准實現根本不使用其locals
參數,並僅使用其globals
來確定import語句的包上下文。
什么是“解釋”模塊名稱? 什么是包上下文?
使用這些參數的示例調用如下所示:
spam = __import__('spam', globals(), locals(), [], -1)
為什么該示例為函數提供globals()
和locals()
? 當我只提供globals()
時會發生什么? 或者都不是?
我可能錯過了與導入模塊有關的命名空間邏輯的一些部分。 你能指點我一篇文章解釋這個/有__import__
函數的例子嗎?
標准實現根本不使用其
locals
參數,並僅使用其globals
來確定import
語句的包上下文。
(來自docs.python.org )
我仍然不知道如何使用globals
; 什么全局變量可以影響import
語句的工作方式?
編輯:在Python 2.5源代碼中查看import.c
,我發現__import__
期望在globals
中找到__name__
或__path__
,以便相對於在這些變量之一中找到的路徑,按順序增加導入搜索路徑。
globals
用於確定調用導入的當前上下文。 例如:
"""
/myproject/a/b.py
/myproject/a/foo.py
/myproject/c/d.py
/myproject/c/foo.py
"""
# Which foo gets imported?
import foo #1
foo = __import__('foo') #2
它們不一樣,因為在#2上沒有(簡單的)方法來知道從哪個模塊調用導入。 __import__
函數需要知道哪個是實際導入正確foo
的當前模塊。
在__import__()
內部, globals
用於獲取調用導入的當前模塊的引用。 來自__import__
源代碼 :
返回正在執行導入的包。如果globals來自模塊foo.bar.bat(本身不是包),則返回foo.bar的sys.modules條目。 如果globals來自包的init .py,則返回sys.modules中的包的條目,作為借用的引用。
什么是“解釋”模塊名稱? 什么是包上下文?
當你進入
>>> a
Python必須“解釋”該名稱。 它是全球性的嗎? 這是當地人嗎?
>>> def f(x):
... return x * a
現在, x
顯然是本地的。 a
必須被“解釋”。 全球? 本地?
為什么該示例為函數提供globals()和locals()? 當我只提供globals()時會發生什么? 或者都不是?
試試看吧。 認真。 用它來玩它比要求它更容易。
重要的是你在>>>
提示符下做的事情是全局的。
您需要定義將創建本地上下文的函數,以便您可以看到全局和本地之間的差異。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.