簡體   English   中英

python是否會使用from * import *在包名稱空間中添加名稱?

[英]Will python add name in packages namespace with from * import *?

假設我們有一個名為“ package”的包,它有一個模塊“ module”。

要是我們

從包導入模塊

由於加載了“包”,包的本地名稱空間是否將具有名稱“模塊”?

我們可以在引用“ import”時看到這樣的短語:

導入語句的第一種形式將本地名稱空間中的模塊名稱綁定到模塊對象,然后繼續導入下一個標識符(如果有)。 如果模塊名稱后跟as,則名稱后跟as作為模塊的本地名稱。

from形式不綁定模塊名稱:它遍歷標識符列表,在步驟(1)中找到的模塊中查找每個標識符,然后將本地名稱空間中的名稱綁定到由此找到的對象。 與第一種導入形式一樣,可以通過指定“ as localname”來提供備用的本地名稱。 如果找不到名稱,則會引發ImportError。 如果標識符列表用星號(*)代替,則模塊中定義的所有公共名稱都將綁定在import語句的本地名稱空間中。

第二段中的“發件人形式不綁定模塊名稱”是什么意思?

是的, package.__init__模塊將可以訪問名稱module

$ mkdir package
$ touch package/__init__.py
$ touch package/module.py
$ python
Python 2.7.5 (default, Oct 28 2013, 20:45:48) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from package import module
>>> import sys
>>> sys.modules['package']
<module 'package' from 'package/__init__.py'>
>>> dir(sys.modules['package'])
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'module']
>>> sys.modules['package'].module
<module 'package.module' from 'package/module.py'>

您引用的第二段討論了from foo import bar import語句綁定的名稱。 bar是綁定的, foo不是。 或者,就以上演示而言:

>>> module
<module 'package.module' from 'package/module.pyc'>
>>> package
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'package' is not defined

from package import module語句將module名稱添加到名稱空間,但未綁定package

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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