Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Don';我不理解Python lambda函数语法_Python_Function_Conditional Statements - Fatal编程技术网

Don';我不理解Python lambda函数语法

Don';我不理解Python lambda函数语法,python,function,conditional-statements,Python,Function,Conditional Statements,我不明白这种语法是如何工作的,也找不到关于它的文档: word = '123xyz567' s = ''.join (c if c.isdigit() else ' 'for c in word) 代码的第2行将采用xyz123,并通过传递lambda函数将其连接在一起,从而将“123 567”连接成一个字符串 但是,我对这种语法的工作原理感到困惑,通常python if-else语句是: def example(): for c in word: if c.isdig

我不明白这种语法是如何工作的,也找不到关于它的文档:

word = '123xyz567'
s = ''.join (c if c.isdigit() else ' 'for c in word)
代码的第2行将采用xyz123,并通过传递lambda函数将其连接在一起,从而将
“123 567”
连接成一个字符串

但是,我对这种语法的工作原理感到困惑,通常python if-else语句是:

def example():
    for c in word:
        if c.isdigit():
            return c
        else:
            return ' ' 

有人能给我解释一下或指导我看一些文档吗?这些文档向我解释了传入
.join()
的lambda函数的语法结构,以及我如何正确使用它?

这不是lambda,而是生成器表达式

几乎类似于列表理解,而是生成器文本

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>
list=[a代表[1,2,3]中的a]
生成器=(a代表[1,2,3]中的a)
打印(列表)#[1,2,3]
打印(生成器)#

显示的语法不是
lambda
函数,而是生成器表达式。见:

您可以在此处阅读有关
lambda
的更多信息:

您显示的
def
函数无法与
return
语句一起正常工作;使用
yield
,使函数不会在第一个字符处跳出:

def example(word):
    for c in word:
        if c.isdigit():
            yield c
        else:
            yield ' ' 

有关
收益率的更多信息,请参见:

这里有几件事,没有一件是
lambda

首先是generator表达式,其形式为:
(for in)

在您的示例中,
c,如果c.isdigit()是“
c
iterable
word

它创建了一个生成器(这是一种iterable)来传递给
str.join

第二件事是三元运算符,其形式为:
if-else

在您的示例中,第一个
c
c.isdigit()
,第二个
'

如果
的计算结果为
True
,则返回第一个
,否则返回第二个


将所有内容放在一起,
(c if c.isdigit()else''表示word中的c)
是一个生成器,具有
word的所有字符,但非数字字符替换为单个空格(每个)。

没有lambda函数。请浏览,并了解该网站的工作原理,帮助您改进当前和未来的问题,从而帮助您获得更好的答案。“教我这个语言功能”是堆栈溢出的主题。堆栈溢出不用于替换现有教程和文档。请注意,不应将
list
用作变量名,因为它可能会覆盖内置项。