Python扩展包大全:https://www.lfd.uci.edu/~gohlke/pythonlibs
Miniconda3下载地址:https://repo.anaconda.com/miniconda
python3常用进制转换:
hex(16) # 10进制转16进制
oct(8) # 10进制转8进制
bin(8) # 10进制转2进制
int('10') # 字符串转换成10进制整数
int('10',16) # 字符串转换成16进制整数
int('0x10',16) # 字符串转换成16进制整数
int('10',8) # 字符串转换成8进制整数
int('010',8) # 字符串转换成8进制整数
int('10',2) # 字符串转换成2进制整数
python时间格式
time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()) # '1900-01-01 08:00:01'
time.strftime('%X') # '08:00:01'
datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # '1900-01-01 08:00:01'
pip安装包临时提速方法
#在 pip install 包名 后面加上 -i + 镜像地址,这样 pip 安装时即可成倍的提速了,国内主要镜像地址如下:
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:https://mirrors.aliyun.com/pypi/simple
中国科技大学: https://pypi.mirrors.ustc.edu.cn/simple
华中理工大学:http://pypi.hustunique.com
山东理工大学:http://pypi.sdutlinux.org
豆瓣:http://pypi.douban.com/simple
Python中yield的用法详解
首先,如果你还没有对yield有个初步分认识,那么你先把yield看做“return”,这个是直观的,它首先是个return,普通的return是什么意思,就是在程序中返回某个值,返回之后程序就不再往下运行了。看做return之后再把它看做一个是生成器(generator)的一部分(带yield的函数才是真正的迭代器),好了,如果你对这些不明白的话,那先把yield看做return,然后直接看下面的程序:
def foo():
print("starting...")
while True:
res = yield 4
print("res:",res)
g = foo()
print(next(g))
print("*"*20)
print(next(g))
就这么简单的几行代码就让你明白什么是yield,代码的输出这个:
starting...
4
********************
res: None
4
下面直接解释代码运行顺序,相当于代码单步调试:
1.程序开始执行以后,因为foo函数中有yield关键字,所以foo函数并不会真的执行,而是先得到一个生成器g(相当于一个对象)
2.直到调用next方法,foo函数正式开始执行,先执行foo函数中的print方法,然后进入while循环
3.程序遇到yield关键字,然后把yield想想成return,return了一个4之后,程序停止,并没有执行赋值给res操作,此时next(g)语句执行完成,所以输出的前两行(第一个是while上面的print的结果,第二个是return出的结果)是执行print(next(g))的结果,
4.程序执行print("*"20),输出20个
5.又开始执行下面的print(next(g)),这个时候和上面那个差不多,不过不同的是,这个时候是从刚才那个next程序停止的地方开始执行的,也就是要执行res的赋值操作,这时候要注意,这个时候赋值操作的右边是没有值的(因为刚才那个是return出去了,并没有给赋值操作的左边传参数),所以这个时候res赋值是None,所以接着下面的输出就是res:None,
6.程序会继续在while里执行,又一次碰到yield,这个时候同样return 出4,然后程序停止,print函数输出的4就是这次return出的4.
再看一个这个生成器的send函数的例子,这个例子就把上面那个例子的最后一行换掉了:
def foo():
print("starting...")
while True:
res = yield 4
print("res:",res)
g = foo()
print(next(g))
print("*"*20)
print(g.send(7))
输出结果:
starting...
4
********************
res: 7
4
程序执行g.send(7),程序会从yield关键字那一行继续向下运行,send会把7这个值赋值给res变量。
第一次使用生成器需要send(None)或者next()唤醒
next() 只唤醒yiedl不传递值
send() 唤醒yiedl并传递值
