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

posted @ 2018-10-08 21:33  MrZJ  阅读(873)  评论(0编辑  收藏  举报