python 备忘
"import sys" 和 "from sys import *"的区别
import sys
访问sys包中的方法需要加前缀:
sys.exit()
from sys import *
访问sys包中的方法不需要加前缀:
exit()
注意
from sys import *
看起来更加方便,但也有弊端,如果以同样的方式导入了其他的包,而这个包中刚好有和sys包里同名的方法,那么就会有冲突、歧义。
这时候from pkg1 import sub_pkg1, sub_pkg2
就派上用场了。
像访问包一样访问你的文件夹
一个文件夹中包含一个空的__init__.py文件,就可以用.
像访问包一样访问里面的内容(python文件或其中的某一个方法)
例如:
import models.CNN.VGG # 导入VGG.py中的所有方法
from models.CNN.VGG import VGG_16 # 导入VGG.py中的VGG_16方法
理解*args,**kwargs
前缀操作符*
:unpack list or tuple
前缀操作符**
:unpack dictionary
args
:a list or tuple, positional arguments
kwargs
:a dictionary, keyword arguments
参考链接1
参考链接2
*args, **kwargs其中一个常见的应用(常在源码中看到)
通过在函数中应用*args, **kwargs,就可以实现一个函数既可以通过关键字传参,也可以直接按顺序传参不写关键字。
例如,在keras函数式API的使用中,下列两条语句等价:
model = Model(inputs=input_tensor_list, outputs=output_tensor_list)
model = Model(input_tensor_list, output_tensor_list)
yield
- yield(中文意思:产生)
- 通过yield可以让函数变成一个生成器,每次运行到yield时就会“中断一次”将yield的值返回出去,然后需要的话再进一步运行函数,生成下一个值。这样做的好处就是可以减少内存的消耗,使得内存消耗维持在一个常数,特别是在读取文件等消耗内存难以预料的场景,通过yield相当于可以每次读取一个固定size的block。
- Python yield 使用浅析
self
- 相当于java里的this,类的实例
- 即,在python的类当中的方法如果有self参数即为实例方法,没有即为类方法
- 一篇文章让你彻底搞清楚Python中self的含义