Python 在通过map()调用的函数中使用yield关键字代替return

Python 在通过map()调用的函数中使用yield关键字代替return,python,function,dictionary,return,yield,Python,Function,Dictionary,Return,Yield,我使用map()将函数x应用于元素列表。 map()返回生成结果的迭代器。但是,函数X已经产生了值,而不是返回值。我只需要使用一次收益率 def x(行): columns=line.strip().split('\t') 屈服柱 值=['a\tb\tc\td\n', 'g\tc\tq\tm\n', 's\tp\to\td\n' ] iters=map(x,值) 对于iters中的i: 打印(下一(i)) it输出 ['a',b',c',d'] ['g'、'c'、'q'、'm'] ['s','

我使用map()将函数x应用于元素列表。 map()返回生成结果的迭代器。但是,函数X已经产生了值,而不是返回值。我只需要使用一次收益率

def x(行):
columns=line.strip().split('\t')
屈服柱
值=['a\tb\tc\td\n',
'g\tc\tq\tm\n',
's\tp\to\td\n'
]
iters=map(x,值)
对于iters中的i:
打印(下一(i))
it输出

['a',b',c',d']
['g'、'c'、'q'、'm']
['s','p','o','d']
代码运行,我没有任何错误。然而,我认为这是一种过分的做法,因为我两次“产出”


我很想知道是否应该改为使用return关键字更改函数x。

Map
创建一个生成器本身,而不需要函数定义中的
yield


使用
return
就足够了。

Map
创建生成器本身,而不需要函数定义中的
yield


使用
return
就足够了。

您在这里所做的与此类似

values = [5 , 9]
iters = map(range, values)
当您在
值上应用
x
时,您正在创建一个
列表(实际上是一个生成器,因为map在3.x中返回一个生成器)
生成器

for it in iters:
    for value in it:
        # do somthing

你在这里所做的与此类似

values = [5 , 9]
iters = map(range, values)
当您在
值上应用
x
时,您正在创建一个
列表(实际上是一个生成器,因为map在3.x中返回一个生成器)
生成器

for it in iters:
    for value in it:
        # do somthing

这没有任何意义。你能详细说明一下你想用一个函数来完成什么吗?传递给
map
的函数对列表的一个对象进行操作,而不是列表本身。
x
是否只有一个
yield
语句?i、 它总是返回一个有单个元素要迭代的生成器?这没有任何意义。你能详细说明一下你想用一个函数来完成什么吗?传递给
map
的函数对列表的一个对象进行操作,而不是列表本身。
x
是否只有一个
yield
语句?i、 e.它将始终返回一个有单个元素要迭代的生成器?
map
不创建生成器,它返回一个
map
对象,它是一个迭代器。无论如何,OP似乎已经理解了这一点,因为他们已经声明themselves@juanpa.arrivillaga哎呀,我的错
map
不创建生成器,它返回一个
map
对象,它是一个迭代器。无论如何,OP似乎已经理解了这一点,因为他们已经声明themselves@juanpa.arrivillaga哎呀,我的错!