我知道文件是一个模块,带有__init__.py
的文件夹是一个包。我还知道有两种导入方法:
对于模块,第一种方法将整个模块(函数/变量)加载到被调用的模块名称空间中。而第二种方法将函数/变量加载到调用模块的命名空间中。这个名称空间也称为本地名称空间,前面的名称空间称为全局名称空间吗?你知道吗
这与使用包而不是模块有什么不同?我知道每次使用上面的选项a或b导入包时,_init__.py
都会被调用。但是在case a
中,只有pkgname被加载到调用模块命名空间(local namespace?)中。在调用/被调用的包命名空间中没有加载任何模块[除非init文件导入了模块];而在case b
中,该特定模块/变量是否加载在被调用的命名空间(全局命名空间)中?如果是from package import module
(本地名称空间?),我想是的。如果是from package import anotherpackage
,则为no(取决于该包是否像前面的示例一样具有带有导入的init文件)。在from package.module import function/variable
的情况下,函数/变量被加载到调用名称空间(本地名称空间?)。你知道吗
在使用import
和from import
时,我对调用方(local)和被调用方(global)在命名空间方面的理解是否正确?你知道吗
从技术上讲,
___init__.py
在python3.4之外不再是强制性的。但建议你用它。 为了回答您的问题,如果您执行一个只导入文件的简单导入,那么该模块/包中的所有内容都将加载到名称空间中。 对于使用from语法的特定导入,将加载特定的类/函数。 不同之处在于,在包的情况下,如果在uu init\uuuuy.py中有任何代码,get会自动加载到名称空间中。假设您有一个使用模块名进行日志记录的记录器可以在包中的任何模块中使用调用
可以在代码的任何地方引用
现在记录器被绑定到包名称空间 希望这有帮助。你知道吗
相关问题 更多 >
编程相关推荐