2014-09-22 35 views
1

我有这样一个清单:使用Python产量从功能

list=['2,130.00','2,140.00','2,150.00','2,160.00'] 

我想用这样的函数

def f(iterable): 
    yield from iterable 

,并在同一应用

float(item.replace(',','')) for item in iterable 

时间以便

f(list) 

回报

[2130.00,2140.00,2150.00,2160.00] 

我知道

[float(x.replace(',','')) for x in list] 

在这里工作,但它是了解如何在功能 和修改项目在迭代的同时使用收益率由。 也许我必须在函数中使用* args和/或** kwargs,但不知道我有和如何。

+0

什么都不用在这里工作? – Holloway 2014-09-22 10:31:55

回答

3

yield from是一个传递;你正在委托给迭代器。无论是包裹在发电机表达的迭代变换的元素,或者不使用yield from但外在的循环:

def f(iterable): 
    yield from (i.replace(',', '') for i in iterable) 

def f(iterable): 
    for item in iterable: 
     yield item.replace(',', '') 
+2

谢谢所以最后收益率在这种类型的上下文中并不是非常有用 – addequttorr 2014-09-22 10:42:29

+2

@addequttorr:从委托给其他生成器时'yield from'非常有用。它不是从另一个迭代器转换数据的正确工具。 – 2014-09-22 10:46:24

+1

有没有文章记录这个? – addequttorr 2014-09-22 10:48:47