匿名函式(Python)

時越z發表於2020-12-28

lambda表示式

Python中使用lambda表示式構建匿名函式。

  1. 語法 (lambda 形參:表示式)(實參)表示式不能有等號 且表示式只能寫一句。
# 一.
def add(x, y):
    return x + y
# 二.
add = lambda x, y:x + y
# 三.
[lambda x, y:x + y][0](1, 2)
以上三種等價

注意形參可以不寫但表示式必須的寫!!

  1. 引數列表不需要小括號,無參就不要寫引數
  2. 冒號用來分割引數列表和表示式部分
  3. 不需要使用return。表示式的值,就是匿名函式的返回值, 表示式中不能出現等號
  4. lambda表示式(匿名函式)只能寫在一行上,也稱為單行函式。
    匿名函式往往用在為高階函式傳參時,使用lambda表示式,往往能簡化程式碼
# 以sorted函式變一下
list_ = [1, 4, 7, 6]
lis = sorted(list_, key = lambda x:ord(x) if isinstance(x, str) else x)
print(lis)
# 等價於
def lis_(x):
    if isinstance(x, str):
        return ord(x)
    return x
lis__ = sorted(list_, key = lis_)
print(lis__)

結果:

[1, 4, 6, 7]
[1, 4, 6, 7]

lambda其他使用方法

[x for x in (lambda *args:map(lambda x: x + 1, args))(*range(5))]
#[1, 2, 3, 4, 5]
[i for i in (lambda *args : map(lambda x: x+1, args))(*range(10))]
#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
(lambda *args : [i for i in args])(*range(10))
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
函式和函式間的呼叫
def fn(x):
    return x + 1
foo = lambda args : fn(args)
foo(2)
# 3

相關文章