这是从“Python食谱”,但没有解释清楚。在
allchars = string.maketrans('','')
def makefilter(keep):
delchars = allchars.translate(allchars, keep)
def thefilter(s):
return s.translate(allchars,delchars)
return thefilter
if __name__ == '__main__':
just_vowels = makefilter('aeiou')
print just_vowels('four score and seven years ago')
print just_vowels('tigere, igers, bigers')
我的问题是,过滤器是如何作为参数传入的?在
makefilter
返回函数。在在示例代码中:
变量
just_vowels
现在引用基于thefilter
的函数。在代码:
^{pr2}$正在调用该函数,并将其
s
参数设置为字符串'tigere, igers, bigers'
。在使用列表理解或生成器表达式可以简化食谱代码:
这将以与提供的makefilter相同的方式工作。在
^{pr2}$以后会动态地创建一个函数,比如Richie。
(char for char in string if char in keep)
位代码创建一个生成器,该生成器将迭代原始字符串的字符并执行筛选。''.join(...)
然后将这些字符组合成一个字符串。在就我个人而言,我发现抽象层次(编写函数返回函数)对于这类问题来说太过分了。这是一个品味的问题,但我认为如果您直接调用重要的行,代码会更清晰:
相关问题 更多 >
编程相关推荐