python代码组织结构
https://blog.csdn.net/weixin_38256474/article/details/81228492
python 模块包(module package),当目录中包含了__init__.py
时,当用import导入该目录时,会执行__init__.py
中的代码。该文件的作用相当于将自身整个文件夹当作一个包来管理。
from xxx import *
是如何实现的,__init__.py
中的__all__
变量关联了一个模块列表,制定哪些模块会被import进当前的作用域中。
python 命名空间
local namespace 函数或类方法
global namespace 当前模块
build_in namespace build_in空间
对于闭包,若在local namespace找不到变量,则下一个查找目标是父函数的local namespace
模块内置属性
__name__
直接运行本模块,值为__main__
, import module
为模块名字
__file__
当前module的绝对路径
__dict__
,__doc__
,__package__
,__path__
python import运行机制
step1:创建一个新的、空的module对象(它可能包含多个module);
step2:将该module对象 插入sys.modules中;
step3:装载module的代码(如果需要,需先编译);
step4:执行新的module中对应的代码。
导入模块分为三类,第一类:导入 Python 内置模块,第二类:导入相关的第三方库模块,第三类:导入程序本地的模块 (即当前应用的模块)。导入不同类别模块时,需要使用空行进行分开。
1 | # 内置模块 |
绝对导入,从项目的根文件夹到要导入模块的完整路径。
相对导入,相对当前模块路径要导入资源的位置。
隐式相对导入(python3中不推荐) import module vs from . import module
python装饰器函数
https://www.cnblogs.com/f-ck-need-u/p/10198247.html
https://www.cnblogs.com/f-ck-need-u/p/10205168.html
闭包
如果想要在内函数中修改外函数的值,需要使用 nonlocal 关键字声明变量,闭包主要用于装饰器的实现。
装饰器 在mmdetection中的使用
装饰器的关键特性是在被装饰的函数被定义之后立刻执行,通常是在导入(import, from xx import xxx),即python模块加载时。
内置属性
__call__
该方法的功能类似于在类中重载 () 运算符,使得类实例对象可以像调用普通函数那样,以“对象名()”的形式使用。
__repr__
会返回和调用者有关的 “类名+object at+内存地址”信息。print(object),类实例化对象的自我描述信息