2024-07-04 07:25:54 发布
网友
我有一个gen对象:
yld123cu = (x * u for x in range(1, 4))
我只能这样使用:
有没有语法可以避免u=。。任务? 有没有办法把u值放在for语句中?在
我想要类似于下面的,但使用gen表达式,而不是函数:
def yld123u(u): for i in range(1, 4): yield i * u for i in yld123u(2): print(i, end=' ')
你可以这样试试。在
Note: Here, we don't have a problem of using named lambda function.
for i in (lambda u: (x * u for x in range(1, 4)))(u=2): print(i, end=' ')
或者
» Output
2 4 6
由于生成器表达式不能有自己的作用域,因此最好的方法是按照您的建议定义生成器函数。在
def yld123u(u): for i in range(1, 4): yield i * u
如果您需要在这个过程中更新u,并且这是您希望避免上述情况的原因,那么就知道您可以^{}将值赋给生成器。在
u
如果不使用send,生成器的行为仍然相同。在
for x in yld123u(4): print(x)
4 8 12
您可以使用send来更新u的值。在
send
gen = yld123u(4) v0 = next(gen) v1 = gen.send(0) v2 = gen.send(4) print(v0, v1, v2)
4 0 12
如果您需要生成器与用户输入进行交互,下面是我以前的回答,它建议了一种实现yield-receive generator usable in a for-loop的方法。在
class YieldReceive: stop_iteration = object() def __init__(self, gen): self.gen = gen self.next = next(gen, self.stop_iteration) def __iter__(self): return self def __next__(self): if self.next is self.stop_iteration: raise StopIteration else: return self.next def send(self, value): try: self.next = self.gen.send(value) except StopIteration: self.next = self.stop_iteration
it = YieldReceive(yld123u(4)) for x in it: print(x) it.send(int(input('Enter next u value: ')))
您可以使用lambda。这对我有用:
lambda
yld123cu = lambda u: (x * u for x in range(1, 4)) for i in yld123cu(2): print(i, end=' ')
你可以这样试试。在
或者
^{pr2}$由于生成器表达式不能有自己的作用域,因此最好的方法是按照您的建议定义生成器函数。在
如果您需要在这个过程中更新} 将值赋给生成器。在
^{pr2}$u
,并且这是您希望避免上述情况的原因,那么就知道您可以^{示例
如果不使用send,生成器的行为仍然相同。在
输出
您可以使用
send
来更新u
的值。在输出
输入回路
如果您需要生成器与用户输入进行交互,下面是我以前的回答,它建议了一种实现yield-receive generator usable in a for-loop的方法。在
用法
您可以使用
lambda
。这对我有用:相关问题 更多 >
编程相关推荐