簡體   English   中英

Python __import__函數中的`globals`和`locals`參數是什么?

[英]What are `globals` and `locals` parameters in Python __import__ function for?

Python文檔中有__import__的一部分,我不明白:

__import__(name[, globals[, locals[, fromlist[, level]]]])

該函數導入模塊name ,可能使用給定的globalslocals 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM