python的lambda形式的理解 Python 中的lambda 是什么意思,有什么作用,如何...
python\u4e2dlambda x:lambda :x**2\u4f5c\u4f55\u7406\u89e3\uff1f\u6211\u4e5f\u9047\u5230\u8fd9\u4e2a\u95ee\u9898\uff0c\u4ed4\u7ec6\u7814\u7a76\u4e86\u4e00\u4e0b\uff0c\u73b0\u5728\u8bf4\u4e00\u4e0b\u3002
\u8fd9\u662f\u4e00\u4e2alambda\u8868\u8fbe\u5f0f\uff0c\u8fd4\u56de\u503c\u662f\u4e00\u4e2alambda\u51fd\u6570\u3002\u4f60\u5e94\u8be5\u8fd9\u4e48\u8bfb\uff1a
lambda x: (lambda: x**2)\uff0c
\u8fd9\u662f\u4e24\u4e2alambda\u51fd\u6570\u5d4c\u5957\uff0c\u7b2c\u4e00\u4e2alambda\u8f93\u5165x\uff0c\u8fd4\u56delambda: x**2\uff0c
\u7b2c\u4e8c\u4e2alambda\u6ca1\u6709\u8f93\u5165\uff0c\u8fd4\u56dex**2\uff0c\u5176\u4e2d\u8fd4\u56de\u5f0f\u7684x\u662f\u6e90\u81ea\u4e8e\u7b2c\u4e8c\u4e2alambda\u8868\u8fbe\u5f0f\u7684\u95ed\u5305\uff08\u53ef\u4ee5\u7406\u89e3\u4e3a\u7b2c\u4e00\u4e2alambda\u8868\u8fbe\u5f0f\u7684\u51fd\u6570\u7a7a\u95f4\uff09\u3002
\u5982\u679c\u5199\u6210\u51fd\u6570\u5f0f\u7684\u65b9\u6cd5\uff0c\u53ef\u80fd\u66f4\u597d\u7406\u89e3\u3002
def lambda1(x):
def lambda2():
return x**2
return lambda2
\u8fd9\u79cd\u5d4c\u5957\u7684\u51fd\u6570\u5e38\u7528\u4e8e\u88c5\u9970\u5668\uff0c\u6216\u8005\u51fd\u6570\u5f0f\u7f16\u7a0b\u3002\u6211\u9047\u5230\u7684\u60c5\u51b5\u662f\u4e3a\u4e86\u4fdd\u5b58\u95ed\u5305\u3002
lambda\u5c31\u662f\u533f\u540d\u51fd\u6570,\u5c31\u662f\u6ca1\u6709\u540d\u5b57\u7684\u51fd\u6570, \u7b80\u4fbf\u5b9e\u7528 ,\u6765\u81ea\u4e8e\u4e8e\u51fd\u6570\u5f0f\u7f16\u7a0b\u7684\u6982\u5ff5(\u8fd9\u4e2a\u4e0d\u61c2\u81ea\u5df1\u8c37\u6b4c); \u8fdejava7\u597d\u50cf\u90fd\u52a0\u8fd9\u4e2a...
\u4e3e\u4e2a\u4f8b\u5b50
\u4e00\u822c\u7684\u51fd\u6570\u662f\u8fd9\u6837:
def f(x):
return x+1
\u8fd9\u6837\u4f7f\u7528 print f(4)
\u7528lambda\u7684\u8bdd\uff0c\u5199\u6210\u8fd9\u6837:
g = lambda x : x+1
\u8fd9\u6837\u4f7f\u7528 print g(4)
调用lambda函数返回表达式的结果。
list的sort 同于内建函数sorted。它有三个参数cmp,key,reverse,均有默认值。
cmp是一个比较器,自定义比较器的话传入两个参数x,y,返回值限制为1(x>y), 0(x=y), -1(x<y)。默认是常规比较,数字比较,字符串比较等等。
key是对序列元素处理(比如问题中序列元素仍是序列,就可以再对序列取索引值),也就是sort的比较器实际接收到值是key处理后的结果(问题中实际参与比较的是1,2,3,4)。
reverse默认是False,意思是从小到大排序,传入True,就从大到小排。
[补充解答题主的疑问]
正是目前最佳答案中说的,key是针对列表元素进行处理的。pairs.sort(key=lambda pair: pair[1])中的pair已深入到列表pairs的每个元素了,所以pair[1]处理的直接是 one ,two,three,four。而题主的疑问“lambda pair.pair[1] 的值是不是 ('2','two')”这里的pair还是pairs列表,结果当然是pairs的元素('2','two')(而不是pairs的元素的元素)
pairs.sort(key=lambda
pair: pair[1])句代码的内部机制好像类似于这样
>>> key=lambda pair:pair[1]
>>> for p in pairs: key(p)
'one'
'two'
'three'
'four'
而不是:
>>> key(pairs)
(2, 'two')
pair[1],比较的是圆括号里第二项的值的大小,'four'<'one'<'three'<'two',默认reverse=False,是升序排列
绛旓細4.7.5. Lambda 褰㈠紡 鍑轰簬瀹為檯闇瑕侊紝鏈夊嚑绉嶉氬父鍦ㄥ嚱鏁板紡缂栫▼璇█渚嬪 Lisp 涓嚭鐜扮殑鍔熻兘鍔犲叆鍒颁簡 Python銆傞氳繃 lambda 鍏抽敭瀛楋紝鍙互鍒涘缓鐭皬鐨勫尶鍚嶅嚱鏁般傝繖閲屾湁涓涓嚱鏁拌繑鍥炲畠鐨勪袱涓弬鏁扮殑鍜岋細 lambda a, b: a+b銆 Lambda 褰㈠紡鍙互鐢ㄤ簬浠讳綍闇瑕佺殑鍑芥暟瀵硅薄銆傚嚭浜庤娉曢檺鍒讹紝瀹冧滑鍙兘鏈変竴涓崟鐙殑琛ㄨ揪寮忋
绛旓細鍦≒ython涓紝璋冪敤鍑芥暟鏃朵笉涓瀹氶渶瑕佷娇鐢ㄧ瓑浜庡彿锛屼絾鏄湁涓绉嶅嚱鏁伴渶瑕佷娇鐢ㄧ瓑浜庡彿锛瀹冨氨鏄痩ambda鍑芥暟锛堜篃绉颁负鍖垮悕鍑芥暟锛銆俵ambda鍑芥暟鏄竴绉嶇畝鍗曠殑鍑芥暟锛岄氬父鐢ㄤ簬瀹氫箟绠鍗曠殑鍑芥暟鎴栬呭湪涓浜涘嚱鏁板紡缂栫▼鐨勫満鏅腑浣跨敤銆俵ambda鍑芥暟鐨勮娉曟牸寮忎负锛歭ambda arguments: expression 鍏朵腑锛宎rguments鏄嚱鏁扮殑鍙傛暟锛屽彲浠ユ槸涓涓垨澶...
绛旓細Lambda鍑芥暟鏄疨ython涓殑涓绉嶇畝娲併佸唴鑱斿畾涔夌殑鍑芥暟褰㈠紡銆傚叾涓昏鐢ㄤ簬瀹氫箟绠鍗曠殑銆佷竴琛岀殑灏忓嚱鏁般備笅闈㈣缁嗚В閲奓ambda鐨勭敤娉曪細涓銆佸熀鏈娉 Lambda琛ㄨ揪寮忕殑璇硶褰㈠紡涓猴細`lambda 鍙傛暟鍒楄〃 : 琛ㄨ揪寮廯銆傚叾涓紝鍙傛暟鍒楄〃鐢ㄤ簬鎸囧畾鍑芥暟鐨勫弬鏁帮紝鍐掑彿鍚庨潰鐨勮〃杈惧紡鍒欐槸鍑芥暟鐨勮繑鍥炲笺備緥濡傦細`lambda x: x * 2`锛岃繖鏄竴涓...
绛旓細鍏跺舰寮忓涓嬶細lambda argument_list: expression鍏朵腑锛宭ambda鏄疨ython棰勭暀鐨勫叧閿瓧锛宎rgument_list鍜宔xpression鐢辩敤鎴疯嚜瀹氫箟銆傚叿浣撲粙缁嶅涓嬨傝繖閲岀殑argument_list鏄弬鏁板垪琛紝瀹冪殑缁撴瀯涓嶱ython涓嚱鏁(function)鐨勫弬鏁板垪琛ㄦ槸涓鏍风殑銆傚叿浣撴潵璇达紝argument_list鍙互鏈夐潪甯稿鐨勫舰寮忋傝繖閲岀殑expression鏄竴涓叧浜庡弬鏁扮殑琛ㄨ揪...
绛旓細Lambda鍑芥暟鏄疨ython涓殑涓绉嶇畝娲佸畾涔夊嚱鏁扮殑鏂瑰紡锛屽畠鏄竴涓皬鐨勫尶鍚嶅嚱鏁帮紝涓昏鐢ㄤ簬绠鐭殑浠诲姟锛屽鎺掑簭鍒楄〃绛銆備笅闈㈣缁嗚В閲奓ambda鐨勭敤娉曞拰浣滅敤銆侺ambda鐨勫熀鏈敤娉 Lambda鍑芥暟浠ュ叧閿瓧“lambda”寮澶达紝鍚庤窡鍙傛暟锛岀劧鍚庢槸涓涓〃杈惧紡銆傚畠鐨勬牸寮忔槸锛歚lambda 鍙傛暟: 琛ㄨ揪寮廯銆傝繖绉嶅嚱鏁版棤闇澹版槑鍚嶇О锛岀洿鎺...
绛旓細Python鈥斺擫ambda琛ㄨ揪寮忔槸涓涓尶鍚嶅嚱鏁帮紝Lambda 琛ㄨ揪寮忓熀浜庢暟瀛︿腑鐨刲ambda婕旂畻寰楀悕锛岀洿鎺ュ搴斾簬鍏朵腑鐨 lambda 鎶借薄锛屾槸涓涓尶鍚嶅嚱鏁帮紝鍗虫病鏈夊嚱鏁板悕鐨勫嚱鏁般侾ython鐢辫嵎鍏版暟瀛﹀拰璁$畻鏈虹瀛︾爺绌跺浼氱殑Guido van Rossum 浜1990 骞翠唬鍒濊璁★紝浣滀负涓闂ㄥ彨鍋欰BC璇█鐨勬浛浠e搧銆侾ython鎻愪緵浜嗛珮鏁堢殑楂樼骇鏁版嵁缁撴瀯锛岃繕鑳界畝鍗...
绛旓細鍦Python璇█涓櫎浜哾ef璇彞鐢ㄦ潵瀹氫箟鍑芥暟涔嬪锛岃繕鍙互浣跨敤鍖垮悕鍑芥暟lambda锛屽畠鏄疨ython涓绉嶇敓鎴愬嚱鏁板璞$殑琛ㄨ揪寮褰㈠紡銆傚尶鍚嶅嚱鏁伴氬父鏄垱寤轰簡鍙互琚皟鐢ㄧ殑鍑芥暟锛屽畠杩斿洖浜嗗嚱鏁帮紝鑰屽苟娌℃湁灏嗚繖涓嚱鏁板懡鍚嶃俵ambda鏈夋椂琚彨鍋氬尶鍚嶅嚱鏁颁篃灏辨槸杩欎釜鍘熷洜锛岄渶瑕佷竴涓嚱鏁帮紝鍙堜笉鎯冲姩鑴戠瓔鍘绘兂鍚嶅瓧锛岃繖灏辨槸鍖垮悕鍑芥暟銆-*- ...
绛旓細lambda 鍒涘缓涓涓尶鍚嶅嚱鏁般傚啋鍙峰墠闈㈡槸浼犲叆鍙傛暟锛屽悗闈㈡槸涓涓鐞嗕紶鍏ュ弬鏁扮殑鍗曡琛ㄨ揪寮忋傝皟鐢╨ambda鍑芥暟杩斿洖琛ㄨ揪寮忕殑缁撴灉銆俵ist鐨剆ort 鍚屼簬鍐呭缓鍑芥暟sorted銆傚畠鏈変笁涓弬鏁癱mp锛宬ey锛宺everse锛屽潎鏈夐粯璁ゅ笺俢mp鏄竴涓瘮杈冨櫒锛岃嚜瀹氫箟姣旇緝鍣ㄧ殑璇濅紶鍏ヤ袱涓弬鏁皒锛寉锛岃繑鍥炲奸檺鍒朵负1(x>y), 0(x=y)锛 -1(x<y...
绛旓細浣曞唴瀹广傝繖閮芥槸鍥犱负lambda鍑芥暟鍙兘鍖呭惈涓涓〃杈惧紡銆傜劧鑰岋紝浣跨敤return鍏抽敭瀛椾細鏋勬垚涓嶇鍚堣瀹氳娉曠殑璇彞锛 濡備笅鎵绀猴細濡備綍鍐欏ソPython鐨凩ambda鍑芥暟 璇ラ敊璇彲鑳芥槸鐢变簬鏃犳硶鍖哄垎琛ㄨ揪寮忓拰璇彞鑰屽紩璧风殑銆傚儚鏄寘鍚 return銆乼ry銆亀ith浠ュ強if鐨勮鍙ヤ細鎵ц鐗规畩鍔ㄤ綔銆傜劧鑰岋紝 琛 杈惧紡鎸囩殑鏄偅浜涘彲浠ヨ璁$畻鍑轰竴涓肩殑琛ㄨ揪...
绛旓細key=lambda x:x[1])鏄互lst鍏冪礌(鍏冪粍)鐨勭浜屼釜鍏冪礌涓簁ey鎺掑簭,榛樿涓哄崌搴 鎺掑簭鍚庣殑lst涓篬(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]print(lst[3][1][2])鏄墦鍗版帓搴忓悗鐨刲st涓殑绗4涓厓绱(鍏冪粍)鐨勭2涓厓绱(瀛楃涓)鐨勭3涓瓧绗,缁撴灉灏辨槸鎵撳嵃瀛楃涓瞭wo鐨勫瓧绗 ...