TYS的博客

算法小白努力学习中

0%

python项目框架学习

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
2
3
4
5
6
7
8
9
# 内置模块
import time
import os

# 第三方模块
import flask

# 本地模块
from .xxx import xxx

绝对导入,从项目的根文件夹到要导入模块的完整路径。

相对导入,相对当前模块路径要导入资源的位置。

隐式相对导入(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),类实例化对象的自我描述信息