python筆記 匿名函式和函式式程式設計

2021-09-24 04:12:22 字數 1611 閱讀 3158

一、匿名函式(lambda):

有些地方需要用到一些簡單的函式,而且用到的次數不太多,這個時候可以把函式改寫成匿名函式,不必專門去定義乙個新的函式。python中,lambda是乙個表示式,並不是乙個語句,而且lambda的主體是只有一行的簡單表示式,並不能擴充套件成乙個多行的**塊。

python的一些匿名函式用法例子:

# 匿名函式的格式:

lambda argument1, argument2, ... argumentn : expression

# 示例一:

square = lambda x: x**2

square = square(3)

# 示例二:

[(lambda x: x*x)(x) for x in range(10)]

# 示例三:

l = [(1,20), (3, 0), (9, 10), (2, -1)]

l.sort(key=lambda x: x[1])

# 示例四:

squared = map(lambda x: x**2, [1,2,3,4,5])

# map(function, iterable) 對iterable的每乙個元素進行function運算。

# 示例五:

d =

dict(sorted(d.items(), key = lambda x: x[1], reverse=true))

二、函式式程式設計

python提供的一些函式式程式設計特性,主要是通過map(),filter()和reduce()這幾個函式,結合匿名函式lambda一起使用。

通常,使用這些函式的速度會更快,因為它們直接由c語言編寫,執行時不需要通過python直譯器間接呼叫。

下面是一些示例用法:

# map(function, iterable)的用法: 對每個iterable的元素運用function函式,組成乙個新的集合 

l = [1,2,3,4,5]

new_list = map(lambda x: x * 2, l)

# 測試map的速度

python3 -mtimeit -s'xs=range(1000000)' 'map(lambda x: x*2, xs)'

python3 -mtimeit -s'xs=range(1000000)' '[x * 2 for x in xs]'

# filter(function, iterable)的用法: 對每個iterable的元素運用function函式,將返回true的元素組合成乙個新的集合

l = [1,2,3,4,5]

new_list = filter(lambda x: x % 2 == 0, l)

# reduce(function, iterable)的用法: 對乙個集合進行一些累積操作,function有兩個引數,表示對iterable裡的每個元素以及上一次呼叫後的結果呼叫function進行運算,最後返回乙個單獨的數值

l = [1,2,3,4,5]

product = reduce(lambda x, y: x * y, l)

# 表示運算: product = 1 * 2 * 3 * 4 * 5

python高階函式和匿名函式

高階函式 允許將函式本身作為引數傳入另乙個函式 允許返回乙個函式。允許返回乙個函式。map 函式 map的第乙個引數為自定義函式,第二個引數為自定義可迭代物件 例子 定義乙個函式f2求平方,使用map函式,求list1的值的平方,list1平方規則按照f2函式執行,返回結果型別為list。list1...

python遞迴函式和匿名函式

乙個函式的內部可以呼叫其他函式。但是,如果乙個函式在內部不呼叫其他函式,而是自己本身的話,這個函式就是遞迴函式。例 def fn num if num 1 result 1else result fn num 1 num return result n int input 請輸入乙個正整數 prin...

python匿名函式和遞迴函式

匿名函式格式 lambda 引數 運算 例子 hello lambda a,b a b 匿名函式一半結合內建函式使用 max list,func func匿名函式比如 列表裡面元素是字典 就是可以 list,lambda x x 鍵 min 和max幾乎一樣 map func iterables 對...