Python 列表理解和迭代器中的别名
假设我有这样的东西:Python 列表理解和迭代器中的别名,python,Python,假设我有这样的东西: for e in some_list: fct(e.my_first_property, e. e.my_second_property) fct2(e.my_first_property) 写起来有点重复,所以我可以用 for e in some_list: p1 = e.my_first_property p2 = e.my_second_property fct(p1, p2) fct2(p1) 还是有点长。所以我想
for e in some_list:
fct(e.my_first_property, e. e.my_second_property)
fct2(e.my_first_property)
写起来有点重复,所以我可以用
for e in some_list:
p1 = e.my_first_property
p2 = e.my_second_property
fct(p1, p2)
fct2(p1)
还是有点长。所以我想知道是否有一些语法,我可以在中定义p1和p2,用于。。。在…
语句中,可能类似于:
for e in some_list with p1 as e.my_first_property, p2 as e.my_second_property:
fct(p1, p2)
fct2(p1)
这在列表理解中尤其有用,因为我不能使用中间变量
我从未见过这样的语法,所以我猜它不存在。但您永远不知道……您可以与地图一起使用:
from operator import attrgetter
for p1, p2 in map(attrgetter(my_first_property, my_second_property), some_list):
fct(p1, p2)
fct2(p1)
for p1, p2 in ((e.my_first_property, e.my_second_property) for e in some_list):
fct(p1, p2)
fct2(p1)
在Python2.x中,map
返回一个列表(与Python3.x中的迭代器相反),如果原始列表的大小很大,则可能不需要该列表。因此,最好使用生成器表达式代替map
:
from operator import attrgetter
for p1, p2 in map(attrgetter(my_first_property, my_second_property), some_list):
fct(p1, p2)
fct2(p1)
for p1, p2 in ((e.my_first_property, e.my_second_property) for e in some_list):
fct(p1, p2)
fct2(p1)
您可以与地图一起使用
:
from operator import attrgetter
for p1, p2 in map(attrgetter(my_first_property, my_second_property), some_list):
fct(p1, p2)
fct2(p1)
for p1, p2 in ((e.my_first_property, e.my_second_property) for e in some_list):
fct(p1, p2)
fct2(p1)
在Python2.x中,map
返回一个列表(与Python3.x中的迭代器相反),如果原始列表的大小很大,则可能不需要该列表。因此,最好使用生成器表达式代替map
:
from operator import attrgetter
for p1, p2 in map(attrgetter(my_first_property, my_second_property), some_list):
fct(p1, p2)
fct2(p1)
for p1, p2 in ((e.my_first_property, e.my_second_property) for e in some_list):
fct(p1, p2)
fct2(p1)
对于p1,p2 in((e.my_first_属性,e.my_second_属性)对于某些列表中的e):
将p1作为e.my_first_属性
比p1=e.my_first_属性
更好吗?您建议的语法不会更短;你只是把代码排成了一行。@khelwood:最后,这是一个品味的问题。但问题在于是否/如何可能,而不是编码风格。对于p1,p2in((e.my_first_属性,e.my_second_属性)对于某些列表中的e):
将p1作为e.my_first_属性比p1=e.my_first_属性
更好吗?您建议的语法不会更短;你只是把代码排成了一行。@khelwood:最后,这是一个品味的问题。但问题是它是否/如何可能,而不是编码风格。生成器或itertools.imap
(在Python 2中)更合适。您至少应该提到,在Python 2中map
返回一个列表,这里不需要它。生成器或itertools.imap
(在Python 2中)更合适。