Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从哪里导入别名?_Python_Import_Alias - Fatal编程技术网

Python 从哪里导入别名?

Python 从哪里导入别名?,python,import,alias,Python,Import,Alias,Python允许导入的别名,通过import语句中的…作为子句,如下所示: import mymodule as somealias from myothermodule import spam as spamalias, ham as hamalias 现在,至少在默认情况下,import语句,包括那些具有as-子句的语句(如上面的语句),会导致调用\uuuuuuuuu builtin\uuuuuu.\uuuuuuuuu import\uuuuu,其参数列表不包括此类别名的名称。下面的“无别

Python允许导入的别名,通过import语句中的
…作为
子句,如下所示:

import mymodule as somealias
from myothermodule import spam as spamalias, ham as hamalias
现在,至少在默认情况下,import语句,包括那些具有
as
-子句的语句(如上面的语句),会导致调用
\uuuuuuuuu builtin\uuuuuu.\uuuuuuuuu import\uuuuu
,其参数列表不包括此类别名的名称。下面的“无别名”导入语句与上面引用的导入语句生成对
\uuuuuuu内置\uuuuuu.\uuuuuu导入\uuuuu
的相同调用:

import mymodule
from myothermodule import spam, ham
那么这些别名是如何进入导入过程的呢?Python是否提供了自定义导入过程如何使用别名的方法


(我没有考虑任何特定的应用程序;我只是想更好地理解Python是如何工作的。)

函数
\uuu import\uu()
不绑定调用范围中的任何名称。基本上

import foo
类似于

foo = __import__("foo")
bar = __import__("foo")

类似于

foo = __import__("foo")
bar = __import__("foo")
名称绑定发生在调用作用域中,而不是函数内部,因此
\uuuu import\uuuu()
不需要知道模块最终将绑定到哪个名称

这也可以从以下语句的CPython字节码中看出:

>>> dis.dis(compile("import foo", "", "exec"))
  1           0 LOAD_CONST               0 (-1)
              3 LOAD_CONST               1 (None)
              6 IMPORT_NAME              0 (foo)
              9 STORE_NAME               0 (foo)
             12 LOAD_CONST               1 (None)
             15 RETURN_VALUE        
>>> dis.dis(compile("import foo as bar", "", "exec"))
  1           0 LOAD_CONST               0 (-1)
              3 LOAD_CONST               1 (None)
              6 IMPORT_NAME              0 (foo)
              9 STORE_NAME               1 (bar)
             12 LOAD_CONST               1 (None)
             15 RETURN_VALUE        

IMPORT\u NAME
opcode隐式调用
\uuu IMPORT\uu()
,并将生成的模块留在内部堆栈上。随后的
STORE\u NAME
从堆栈中弹出模块并将其绑定到本地名称。您可以看到这两个代码段之间的唯一区别是模块存储到哪个名称。

答案很好,而且速度非常快。我会尽快接受的,让我来吧。谢谢