簡體   English   中英

不明白 Python lambda function 語法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM