Python中的特殊函式 生成器 遞迴 匿名

2021-10-05 09:22:33 字數 3339 閱讀 8501

匿名函式:lambda表示式

? lambda表示式用來宣告匿名函式,也就是沒有函式名字的臨時使用的小函式,尤其適合需要乙個函式作為另乙個函式引數的場合。

? lambda表示式只可以包含乙個表示式,該表示式的計算結果可以看作是函式的返回值,不允許包含其他複雜的語句,但在表示式中可以呼叫其他函式。

lambda宣告匿名函式的一般形式: lambda 引數列表:表示式

匿名函式單獨這麼用意義不大,一般情況下是和其他函式一起使用,才能顯示它的功能。比如:map()、filter()…等內建函式字典、跳轉表

def

demo

(n):

return n*n

a_list =[1

,2,3

,4,5

]list

(map

(lambda x: demo(x)

, a_list)

)#在lambda表示式中呼叫函式

函式的遞迴

def

fac(n)

:if n ==1:

return

1else

:return fac(n-1)

*nx =

int(

input

("請輸入乙個整數:"))

print

(f"! = "

)

map()函式是對映函式

新定義列表儲存結果

lst =[1

,2,3

,4,5

]res =

for i in lst:2)

print

(res)

# map()和lambda表示式

lst =[1

,2,3

,4,5

]print

(list

(map

(lambda x:x+

2, lst)

))

map()還可以同時處理多個序列。

lst1 =[1

,2,3

]lst2 =[4

,5,6

]# 返回的是迭代器

print

(list

(map

(lambda x,y: x*y, lst1, lst2)

))

標準庫functools中的 reduce()函式

格式:reduce(function, iterable[, initializer])

引數:function – 函式,有兩個引數,1個是用於儲存操作的結果,另乙個是每次迭代的元素。

iterable – 可迭代物件

initializer – 可選,初始引數

from functools import

reduce

n =int

(input

("n = "))

lst =

list

(range(1

, n+1)

)res =

reduce

(lambda x,y:x*y, lst)

print

(f"! = "

)

filter()函式¶

格式:filter(function, iterable)

引數:function:函式只能接收乙個引數,而且該函式的返回值為布林值。

iterable:可迭代物件,包括列表、元組、字典、集合、字串等。

功能:從乙個序列中篩出符合條件的元素,將迭代器中的每個元素作為引數傳遞給函式進行判斷,然後返回 true 或 false,最後將返回 true 的元素放到新的迭代器中。

返回值:迭代器,在使用時需要先將其轉換為列表list或者元祖tuple之後再操作。

輸出及格學生的分數,過濾掉 < 60分的

def

check_score

(score)

:if score >60:

return

true

else

:return

false

student_score =

result =

filter

(check_score, student_score.values())

# 將返回的迭代器轉為列表list或者元組

print

(list

(result)

)

生成器函式

列表推導式

列表推導式可以利用 range 區間、元組、列表、字典和集合等資料型別,快速生成乙個滿足指定需求的列表。

列表推導式的語法格式如下: [表示式 for 迭代變數 in 可迭代物件 [if 條件表示式] ]

將10以內所有整數的平方寫入列表。

lst2 =

[i**

2for i in

range(1

,11)]

print

(lst2)

# 2個for迴圈

lst5 =

[(x, y)

for x in

range(5

)for y in

range(4

)]print

(lst5)

建立生成器的方法1:將列表推導式中的中括號[ ]

換成(),就是生成器表示式。

區別:列表推導式生成的是乙個列表,占用記憶體空間

生成器儲存的是生成資料的方法,占用記憶體小

列表的每乙個元素可以直接列印

生成器的元素不可以直接列印,需要通過next()、for迴圈、list()等方法來使用。

deff(

):a, b =1,

1while

true

:yield a #暫停執行,需要時再產生乙個新元素

a, b = b, a+b #序列解包,繼續生成新元素

g = f(

)#建立生成器物件

for i in

range(10

):#斐波那契數列中前10個元素

print

(g.send(

none

), end=

' ')

python生成器函式 Python 生成器函式

一 生成器 生成器指的是生成器物件,可由生成器表示式得到,也可使用 yield 關鍵字得到乙個生成器函式,呼叫這個函式得到乙個生成器物件 生成器物件,是乙個可迭代物件,是乙個迭代器 生成器物件,是延遲計算 惰性求值的 1.1 生成器函式 函式體重包含 yield 語句的函式,就是生成器函式,呼叫後返...

python 生成器函式

python 函式的定義體中有 yield 關鍵字,該函式就是生成器函式。呼叫生成器函式時,會返回乙個生成器物件。生成器函式的定義體執行完畢後,生成器物件會丟擲stopiteration 異常。def gen a print start yield 1 print starting yield 2 ...

python函式 生成器

1.生成器 是乙個特殊的迭代器 迭代的抽象層級更高 所以,擁有迭代器的特性,惰性計算資料,節省記憶體。能夠記錄下狀態,並通過next 函式,訪問下乙個狀態。具備可迭代性。但是,如果打造乙個自己的迭代器,比較複雜,需要實現很多方法 在後續的面相物件程式設計中會講解 所以,就有乙個更加優雅的方式 生成器...