以做包子吃包子为例,表示 send 传值,yield 接受值
import time
import random
def init(func):
def wrapper(*args,**kwargs):
g=func(*args,**kwargs)
next(g)
return g
return wrapper
def producer(target,count):
for i in range(count):
target.send('baozi%s' %i)
@init
def consumer(name):
while True:
food=yield
print('%s start to eat %s' %(name,food))
consumer('alex',produncer(10))
divmod 取余数
print(divmod(73,23))
#结果(3, 4)
forzenset 不可变集合
s=frozenset({1,2,3})
print(type(s))
#结果 <class 'frozenset'>
isinstance 判断是否为目标类型
print(isinstance(1,int))
# True
pow
print(pow(3,2,2)) #3**2%2
# 1
reversed 反转
l=['a1','a2','a3','a4','a5','a6','a7']
print(list(reversed(l)))
#['a7', 'a6', 'a5', 'a4', 'a3', 'a2', 'a1']
round 保留几位小数
print(round(3.123123123,4))
#3.1231
slice 切片对象
l=['a1','a2','a3','a4','a5','a6','a7','a8','a9','a10','a11']
x=slice(2,10,2)
print(l[x])
# ['a3', 'a5', 'a7', 'a9']
sum 求和 只能加数字
zip 拉链函数,必须一一对应
s='hello!'
l=[1,2,3,4,5,6]
for i in zip(s,l):
print(i)
('h', 1)
('e', 2)
('l', 3)
('l', 4)
('o', 5)
('!', 6)
lambda 匿名函数 可以取代简单函数,
lambda x:x**2
map 映射
l=[1,2,3,4]
m=map(lambda x:x**2,l)
print(list(m))
#[1, 4, 9, 16]
reduce 合并 需要加载模块 from functools import reduce
from functools import reduce
print(reduce(lambda x,y:x+y,range(100),100)) #最后的100 是初始值
#5050
filter 过滤
names=['alex_sb','yuanhao_sh','wupeiqi_sb','egon']
print(list(filter(lambda name:name.endswith('_sb'),names)))
#['alex_sb', 'wupeiqi_sb']
sorted 排序
l=[1,2,4,9,-1]
print(sorted(l)) #从小到大
print(sorted(l,reverse=True)) #从大到小
#[-1, 1, 2, 4, 9]
#[9, 4, 2, 1, -1]
递归调用
在调用一个函数的过程中,直接或者间接调用了该函数的本身
必须有明确的结束条件
每次递归,问题规模相比上一次减少
递归效率不高,递归过多,会导致
修改递归次数上限