日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

[Python]使用 lambda 函数

發(fā)布時(shí)間:2023/12/9 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Python]使用 lambda 函数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

From:http://woodpecker.org.cn/diveintopython/power_of_introspection/lambda_functions.html

4.7.?使用 lambda 函數(shù)

  • 4.7.1. 真實(shí)世界中的 lambda 函數(shù)

Python 支持一種有趣的語法,它允許你快速定義單行的最小函數(shù)。這些叫做 lambda 的函數(shù),是從 Lisp 借用來的,可以用在任何需要函數(shù)的地方。

例?4.20.?lambda 函數(shù)介紹

>>> def f(x):
... return x*2
... >>> f(3)
6
>>> g = lambda x: x*2
>>> g(3)
6
>>> (lambda x: x*2)(3)
6
這是一個(gè) lambda 函數(shù),完成同上面普通函數(shù)相同的事情。注意這里的簡短的語法:在參數(shù)列表周圍沒有括號(hào),而且忽略了return 關(guān)鍵字 (隱含存在,因?yàn)檎麄€(gè)函數(shù)只有一行)。而且,該函數(shù)沒有函數(shù)名稱,但是可以將它賦值給一個(gè)變量進(jìn)行調(diào)用。
使用 lambda 函數(shù)時(shí)甚至不需要將它賦值給一個(gè)變量。這可能不是世上最有用的東西,它只是展示了lambda 函數(shù)只是一個(gè)內(nèi)聯(lián)函數(shù)。

總的來說,lambda 函數(shù)可以接收任意多個(gè)參數(shù) (包括可選參數(shù)) 并且返回單個(gè)表達(dá)式的值。lambda 函數(shù)不能包含命令,包含的表達(dá)式不能超過一個(gè)。不要試圖向lambda 函數(shù)中塞入太多的東西;如果你需要更復(fù)雜的東西,應(yīng)該定義一個(gè)普通函數(shù),然后想讓它多長就多長。

lambda 函數(shù)是一種風(fēng)格問題。不一定非要使用它們;任何能夠使用它們的地方,都可以定義一個(gè)單獨(dú)的普通函數(shù)來進(jìn)行替換。我將它們用在需要封裝特殊的、非重用代碼上,避免令我的代碼充斥著大量單行函數(shù)。

4.7.1.?真實(shí)世界中的 lambda 函數(shù)

apihelper.py 中的 lambda 函數(shù):

processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)

注意這里使用了 and-or 技巧的簡單形式,它是沒問題的,因?yàn)?lambda 函數(shù)在布爾環(huán)境中總是為真。(這并不意味這lambda 函數(shù)不能返回假值。這個(gè)函數(shù)對(duì)象的布爾值為真;它的返回值可以是任何東西。)

還要注意的是使用了沒有參數(shù)的 split 函數(shù)。你已經(jīng)看到過它帶一個(gè)或者兩個(gè)參數(shù)的使用,但是不帶參數(shù)它按空白進(jìn)行分割。

例?4.21.?split 不帶參數(shù)

>>> s = "this is\na\ttest"
>>> print s
this is
a test

>>> print s.split()
['this', 'is', 'a', 'test']
>>> print " ".join(s.split())
'this is a test'
這是一個(gè)多行字符串,通過使用轉(zhuǎn)義字符的定義代替了三重引號(hào)。\n 是一個(gè)回車,\t 是一個(gè)制表符。
不帶參數(shù)的 split 按照空白進(jìn)行分割。所以三個(gè)空格、一個(gè)回車和一個(gè)制表符都是一樣的。
通過 split 分割字符串你可以將空格統(tǒng)一化;然后再以單個(gè)空格作為分隔符用join 將其重新連接起來。這也就是 info 函數(shù)將多行doc string 合并成單行所做的事情。

那么 info 函數(shù)到底用這些 lambda 函數(shù)、split 函數(shù)和and-or 技巧做了些什么呢?

processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)

processFunc 現(xiàn)在是一個(gè)函數(shù),但是它到底是哪一個(gè)函數(shù)還要取決于 collapse 變量。如果 collapse 為真,processFunc(string) 將壓縮空白;否則processFunc(string) 將返回未改變的參數(shù)。

在一個(gè)不很健壯的語言中實(shí)現(xiàn)它,像 Visual Basic,你很有可能要?jiǎng)?chuàng)建一個(gè)函數(shù),接受一個(gè)字符串參數(shù)和一個(gè)collapse 參數(shù),并使用 if 語句確定是否壓縮空白,然后再返回相應(yīng)的值。這種方式是低效的,因?yàn)楹瘮?shù)可能需要處理每一種可能的情況。每次你調(diào)用它,它將不得不在給出你所想要的東西之前,判斷是否要壓縮空白。在Python 中,你可以將決策邏輯拿到函數(shù)外面,而定義一個(gè)裁減過的 lambda 函數(shù)提供確切的 (唯一的) 你想要的。這種方式更為高效、更為優(yōu)雅,而且很少引起那些令人討厭 (哦,想到那些參數(shù)就頭昏) 的錯(cuò)誤。

lambda 函數(shù)進(jìn)一步閱讀

  • Python Knowledge Base 討論了使用lambda 來間接調(diào)用函數(shù)。
  • Python Tutorial 演示了如何從一個(gè)lambda 函數(shù)內(nèi)部訪問外部變量。(PEP 227 解釋了在Python 的未來版本中將如何變化。)
  • The Whole Python FAQ 有關(guān)于令人模糊的使用lambda 單行語句的例子。

總結(jié)

以上是生活随笔為你收集整理的[Python]使用 lambda 函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。