生成器send方法 遞迴 匿名函式 內建函式

2022-08-02 01:45:11 字數 2512 閱讀 7527

今日內容

1.生成器的send方法。

2.遞迴:函式自己呼叫自己

3.匿名函式

4.內建函式

生成器send方法

send的工作原理

1.send發生資訊給當前停止的yield

2.再去呼叫__next__()方法,然後生成器繼續往下走,返回下乙個yield值並停止

案例:

persons = ['張三', '李四', '王五', '趙六', '錢七']

def order(persons):

for i in range(len(persons)):

if i == 0:

print('%s在面試' % persons[0])

else:

print('%s叫%s去面試' % (name, persons[i]))

print('%s面試結束' % persons[i])

name = yield persons[i]

obj = order(persons)

for i in range(len(persons)):

if i == 0:

p = obj.__next__()

else:

p = obj.send(p)

print('---------------')

遞迴:

函式直接或間接呼叫本身,都稱之為遞迴

回溯:找尋答案的過程

遞推:推出結果的過程

前提條件:

1.遞迴必須有出口

2.遞迴回溯遞推的條件一定有規律

案例:

# 比如總共有5個人,詢問第乙個人的年紀,他說我比第二個人大兩歲,問第二個人他說

# 我比第三個人大兩歲,依次類推。直到第五個人他說他40歲,求第乙個人的年紀

def get_age(count): # 獲取人的數量,count是外界傳入的資訊,告訴它是幾個人

if count == 1: # 這裡是出口,給出最後乙個人的年紀

return 40 # 最後乙個人的年紀,來通過減法來反推

age = get_age(count - 1)-2 # 每次進來都回把人數減1,並且歲數減2.直到count = 1 .得到最後乙個人的年紀

return age # 然後返回 計算出的第乙個人的年紀

age = get_age(10)

print(age) # 結果為22歲

# 求 n 的階乘, 比如5的階乘= 5!* 4!* 3!* 2!* 1! = 120

# 5! = 5 * 4

# 4! = 4 * 3

# 3! = 3 * 2

# 2! = 2 * 1

# 1! = 1 # 數學界規定,1的階乘等於1

def jiecheng(n):

if n ==1 or n ==0:

return 1

ji = n * jiecheng(n-1)

return ji

res = jiecheng(5)

print(res) # 結果為120

匿名函式

1.函式沒有函式體,

2.匿名函式的關鍵字採用 lambda

3.關鍵字 lambda 與 標識函式功能體: 之間一定是引數,所以省略()

4.匿名還是沒有函式體,只有返回值,所以函式體和返回值的return關鍵字都省略了

格式:  lambda *args,**kwargs:'返回值'
注意:

1.引數的使用和有名函式一樣,六種形參都支援

2.返回值必須明確成乙個值,可以為單個值物件,也可以為乙個容器物件

max結合匿名工作原理

1.max內部會遍歷iter, 將遍歷結果逐一傳給lambda的引數x

2.依據lambda的返回值作為比較條件,得到最大條件下的哪個遍歷值

3.對外返回最大的遍歷值

常用的內建函式

map()函式

# res = map(lambda x:x * 2,[3,1,2])  # 將遍歷結果對映為任意型別值,

# print(list(res)) # 此處使用list接收

# print(tuple(res)) # 也可以使用元祖接收

#  reduce() 函式會對引數序列中元素進行累積。

# from functools import reduce

# res = reduce(lambda x, y: x * y, [3, 1, 2]) # 使用匿名函式,來計算列表中所有數字相乘的結果

# print(res) # 結果為6

Python筆記 生成器方法send

日期 20170926 生成器內有乙個方法send,可再次傳入乙個值。上面那句可能聽不懂,但是不要緊,我們先來看看 usr bin python3 defmygenerator value yield 1yield value return done gen mygenerator print ne...

生成器物件send 和next 函式

一面問到的問題。做個記錄。send和next要結合yield一起看 def mygenerator value yield 10 value yield value gen mygenerator print next gen print gen.send 2 輸出結果 102 解析 send re...

yield生成器中的send方法

yield生成器中提供了send方法,可以給生成器傳遞引數。我們可以使用以下函式感受 def foo print enter foo while true result yield 4 if result print send me a value d result,return else prin...