Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列表理解和迭代器中的别名_Python - Fatal编程技术网

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中)更合适。