def foo(): print('starting') while True: x=yield #yield的表達式形式 print('value : ',x) g=foo() next(g) #next(g)==g.semd(None) g.send(2) #send的效果:1.將攜帶的值傳給yield,注意是yiled,而不是x,而後yiled賦值給x 2.send()方法具備和next()方法同樣的功能,也就是繼續執行,直到碰到yield結束.
yield表達式形式(例如: x = yield)下,生成器會有一個send的操做: app
#send的效果:
# 1:先從爲暫停位置的那個yield傳一個值,而後yield會把值賦值x
# 2:與next的功能同樣
#3: send傳多個值時,必須以元組的形式
def foo(): print('starting') while True: x=yield print('value:',x) foo() #next(g) # g.send(1) foo()#不執行print('starting'),由於定義該函數,解釋器在檢測語法的時候,檢測到有yield,那麼在執行該函數的時候就不會打印。 g.send(1) ###send 有///傳值+next的功能,傳值給yield,再賦值給x,再接着日後走,直到下一個yield中止。 g.send-----1567890`124680>首先要給一個初始化的值,才能再g.send(1)傳值
案例:ide
def good(func): def good1(*args,**kwargs): g=func(*args,**kwargs) next(g) return g return good1 @good def eater(name): print('%s starting to eat '%name) food_list=[] while True: food=yield food_list food_list.append(food) print('%s start to eat %s'%(name,food)) print(food_list) m=eater('jason') m.send('火腿')
注意點:函數
既然send()方法有和next同樣的做用,那麼咱們可不能夠這樣作:spa
def foo(): while True: x = yield #函數有yield,函數執行的結果就是生成器,即foo()就是生成器。而要執行的話就須要next(g). print("value:",x) g = foo() g.send(1) #執行給yield傳值,這樣行不行呢?
很明顯,是不行的;3d
TypeError: can't send non-None value to a just-started generator
錯誤提示:不能傳遞一個非空值給一個未啓動的生成器。code
也就是說,在一個生成器函數未啓動以前,是不能傳遞數值進去。必須先傳遞一個None進去或者調用一次next(g)方法,才能進行傳值操做。對象
三:內置函數blog
abs(x) #取絕對值,若是是複數,返回值是該複數的模 divomd(x,y) #函數完成除法運算,返回商和餘數 isinstance(object,type) #判斷對象是否是此類型 chr() #函數返回ASCII碼對應的字符串 ord() #函數返回字符串對應的ASCII碼 max(),min() #返回函數的最大值與最小值(字母:z>a)
內置函數實例/:ip
func2=lambda x:x**2 #匿名函數:至關於return x**2 # map:映射 # l=[1,2,3,4] # m=map(lambda x:x**2,l) #reduce:合併 from functools import reduce print(reduce(lambda x,y:x+y,range(100),100)) # filter:過濾 # names=['alex_sb','yuanhao_sb','wupeiqi_sb','egon'] # print(list(filter(lambda name:name.endswith('_sb'),names))) # #sorted 升序 # l=[1,2,4,9,-1] # print(sorted(l)) #從小到大 # print(sorted(l,reverse=True)) #從大到小
# s='hello' # l=[1,2,3] # # for i in zip(s,l): #拉鍊,s,l 一一隨對應 # print(i) l=['a','b','c'] for i in enumerate(l): print(i) # =========結果========== (0, 'a') (1, 'b') (2, 'c')