我最近收到了stackoverflow研究员对我上一个问题的回答,为了理解这个函数,我试着询问更多的问题,但不知怎么的,没有回答,所以我想在这里问一下。你知道吗
我想知道lambda表示的k和v是什么?我以为它是这样表现的。。。。。。你知道吗
k = dictionary ?
v = string ? # Did I understand it correctly?
dictionary = {"test":"1", "card":"2"}
string = "There istest at the cardboards"
from functools import reduce
res = reduce(lambda k, v: k.replace(v, dictionary[v]), dictionary, string)
因为我们使用lambda,所以它在这两个变量中循环每个元素。但为什么要用k代替?那不是一本字典吗?它应该是v.replace吗?不知怎么的,这种方法是有效的。我希望有人能向我解释这是如何工作的,如果可能的话,请提供更多的细节。谢谢您!你知道吗
reduce
相当于重复调用函数。你知道吗本例中的函数是lambda,但lambda只是一个匿名函数:
reduce
本身的定义是(这里的None
默认值和len
测试都不太正确):所以,问问自己,当调用lambda函数时,这个会做什么。以下内容:
循环将迭代字典中的每个键。它将把该键连同存储的
ret
(或第一次调用的initial
参数)一起传递给函数。因此,您将得到每个键,加上最初为"There istest at the cardboards"
的字符串值,作为v
(字典中的键,在reduce
的扩展中称为i
)和k
(长字符串,在reduce
的扩展中称为ret
)参数。你知道吗请注意,
k
是全文字符串,而不是用作字典键的字符串,而v
是字典键的单词。我在这里使用变量名k
和v
,只是因为您也这么做了。如注释中所述,text
和word
在扩展的def f(...)
或原始的lambda
函数中可能是更好的变量名。你知道吗跟踪代码执行
请尝试相同的代码,除了:
你写的是:
在函数
f
上运行functools.reduce
函数,将dictionary
和string
作为其他两个参数,并观察输出。你知道吗相关问题 更多 >
编程相关推荐