lambda --定義匿名或內(nèi)聯(lián)函數(shù) --并且實(shí)現(xiàn)綁定變量的值

問(wèn)題:需要提供一個(gè)短小的回調(diào)函數(shù)為sort()這樣的操作使用,但是又不想通過(guò)def語(yǔ)句編寫(xiě)一個(gè)單行的函數(shù)

解決方案:像這種僅僅完成表達(dá)式求值的簡(jiǎn)單函數(shù)可以通過(guò)lambda表達(dá)式來(lái)替代
# 示例1:
add = lambda x, y: x + y
print(add(1, 2))  # 3

# 示例2:lambda表達(dá)式可用在如下的上下文環(huán)境中,比如排序或者對(duì)數(shù)據(jù)新進(jìn)行整理時(shí)
names = ['a', 'b', 'kj', 'iuo']
print(sorted(names, key=lambda name: name.lower())) # ['a', 'b', 'iuo', 'kj']
問(wèn)題: 我們利用lambda表達(dá)式定義一個(gè)匿名函數(shù),但是也希望可以在函數(shù)定義的時(shí)候完成對(duì)特定變量的綁定

下面看下lambda表達(dá)式中是如何綁定變量的:

# 示例1:
x = 10
a = lambda y: x+y
x = 20
b = lambda y: x+y

print(a(10))  # 30  # 原因分析:lambda表達(dá)式中用到x是一個(gè)自由變量,在運(yùn)行的時(shí)候綁定而不是定義的時(shí)候綁定
print(b(10))  # 30
解決方案:如果希望匿名函數(shù)可以在定義的時(shí)候綁定變量,并且保持值不變,那么可以將那個(gè)值作為默認(rèn)參數(shù)實(shí)現(xiàn)
x = 10
a = lambda y, x=x: x+y
x = 20
b = lambda y, x=x: x+y
print(a(10))  # 20
print(b(10))  # 30

本節(jié)中提到的問(wèn)題較容易出現(xiàn)在對(duì)lambda函數(shù)過(guò)于聰明的應(yīng)用上。比方說(shuō),通過(guò)列表推導(dǎo)來(lái)創(chuàng)建一列l(wèi)ambda表達(dá)式,實(shí)例代碼如下:

funds = [lambda x: x+n for n in range(3)]
for f in funds:
    print(f(0))  # 2, 2, 2

funds = [lambda x, n=n: x+n for n in range(3)]  # 給個(gè)默認(rèn)參數(shù),在定義lambda匿名函數(shù)的時(shí)候就把n綁定了
for f in funds:
    print(f(0))  # 0, 1, 2
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 原文鏈接:https://github.com/EasyKotlin 值就是函數(shù),函數(shù)就是值。所有函數(shù)都消費(fèi)函數(shù),...
    JackChen1024閱讀 6,027評(píng)論 1 17
  • 第一部分Common Lisp介紹第1章 介紹一下Lisp你在學(xué)的時(shí)候覺(jué)得已經(jīng)明白了,寫(xiě)的時(shí)候更加確信了解了,教別...
    geoeee閱讀 3,002評(píng)論 5 8
  • 寫(xiě)在開(kāi)頭:本人打算開(kāi)始寫(xiě)一個(gè)Kotlin系列的教程,一是使自己記憶和理解的更加深刻,二是可以分享給同樣想學(xué)習(xí)Kot...
    胡奚冰閱讀 1,276評(píng)論 0 6
  • 前言 人生苦多,快來(lái) Kotlin ,快速學(xué)習(xí)Kotlin! 什么是Kotlin? Kotlin 是種靜態(tài)類(lèi)型編程...
    任半生囂狂閱讀 26,252評(píng)論 9 118
  • 這本書(shū)的名字是《人生逆襲,只要做到這五步》,覺(jué)得翻譯得大有標(biāo)題黨之嫌,所以我將其稱(chēng)為改變的科學(xué)。 作者約...
    牧虛戎閱讀 444評(píng)論 1 4