[英]Don't understand Python lambda function syntax
我不明白這種語法是如何工作的,也找不到關於它的文檔:
word = '123xyz567'
s = ''.join (c if c.isdigit() else ' 'for c in word)
第 2 行代碼將采用 xyz123 並通過傳入 lambda function 來將"123 567"
連接到一個字符串中
但是,我對這種語法的工作原理感到困惑,通常是 python if-else 語句:
def example():
for c in word:
if c.isdigit():
return c
else:
return ' '
有人可以解釋或指導我閱讀向我解釋 lambda function 的語法結構傳遞給.join()
的文檔以及如何正確使用它嗎?
那不是 lambda 而是生成器表達式。
https://www.python.org/dev/peps/pep-0289/
幾乎就像一個列表推導,而是一個生成器文字。
list = [a for a in [1,2,3]]
generator = (a for a in [1,2,3])
print(list) # [1,2,3]
print(generator) # <generator object <genexpr> at 0x7f8ee3abd6d0>
您顯示的語法不是lambda
function,而是生成器表達式。 請參閱:生成器表達式與列表推導式
您可以在此處閱讀有關lambda
的更多信息: 為什么 Python lambdas 有用?
您顯示的def
function 無法與return
語句一起正常工作; 使用yield
以使 function 不會在第一個字符處跳出:
def example(word):
for c in word:
if c.isdigit():
yield c
else:
yield ' '
更多關於yield
的信息:“產量”關鍵字有什么作用?
這里發生了幾件事,沒有一個是lambda
。
首先是生成器表達式,其形式為: (<expresion> for <var> in <iterable>)
。
在您的示例word
, <expresion>
是iterable
c if c.isdigit() else ' '
, <var>
是c
它創建了一個生成器(這是一種可迭代的)以傳遞給str.join
。
第二件事是三元運算符,其形式為: <expresion> if <bool-expresion> else <expresion>
。
在您的示例中,第一個<expresion>
是c
, <bool-expresion>
是c.isdigit()
,第二個<expresion>
是' '
。
如果<bool-expresion>
計算結果為True
,則返回第一個<expresion>
expresion> ,否則返回第二個<expresion>
。
一切放在一起, (c if c.isdigit() else ' 'for c in word)
是一個生成器,其中包含word
的所有字符,但非數字字符替換為單個空格(每個)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.