使用列表解析以异步方式实现对Python中的iterable执行简单转换:
y = [f(arg) for arg in args]
其中f
是simple statement,如果map
是命名函数,则为f
:
y = map(f, args)
Guido favors list comprehensions超过map(lambda x:..., args)
,确实列出了对map
或filter
at all使用情况的理解。
但是,我不清楚我应该如何解决以下问题:
解决此类问题的最惯用方法是什么? 我已经看过并尝试过的一些我已经参与过的Python项目:
显而易见的方法是预先声明输出和循环:
def transform(...):
...
y = []
for arg in args:
first_statement
second_statement
...
y.append(statement)
评论:
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]
评论:
将内部函数移动到外部范围解决了其中一些问题,但引入了更多:
def _anonymous(arg):
first_statement
second_statement
...
return statement
def transform(...):
...
y = map(_anonymous, args)
评论:
map
)或partial
ized 我很矛盾。你如何解决你需要做一个非平凡的丢弃地图的问题?