在Python中对iterable执行简单转换是通过列表解析来实现的:
y = [f(arg) for arg in args]
Run Code Online (Sandbox Code Playgroud)
where f是一个简单的语句,或者一个函数mapif f是一个命名函数:
y = map(f, args)
Run Code Online (Sandbox Code Playgroud)
圭多有利于列表解析过map(lambda x:..., args),确实列表内涵上的使用map或filter 在所有.
但是,我不清楚我应该如何解决以下问题:
解决此类问题最常用的方法是什么?我见过并尝试过的一些我已经参与过的Python项目:
显而易见的方法是预先声明输出和循环:
def transform(...):
...
y = []
for arg in args:
first_statement
second_statement
...
y.append(statement)
Run Code Online (Sandbox Code Playgroud)
评论:
y必须与长度相同args)另一种选择是将逻辑封装在嵌套函数中,然后使用map或list comprehension调用它:
def transform(...):
...
def anonymous(arg):
first_statement
second_statement
...
return statement
y = map(anonymous, args)
# y = [anonymous(arg) for arg in args]
Run Code Online (Sandbox Code Playgroud)
评论:
将内部函数移动到外部范围解决了其中一些问题,但介绍了更多:
def _anonymous(arg):
first_statement
second_statement
...
return statement
def transform(...):
...
y = map(_anonymous, args)
Run Code Online (Sandbox Code Playgroud)
评论:
map)或partialized我很矛盾.你如何解决你需要做一个非平凡的丢弃地图的问题?