Mar*_*zyk 0 python multithreading python-multithreading python-3.x
我正在寻找这个问题的解决方案:
我有两个功能:
def foo1():
while True:
print("x")
def foo2():
while True:
print("y")
Run Code Online (Sandbox Code Playgroud)
我想交替运行它们,如:
功能不能同时工作,目前只有其中一个可以工作.
编辑:留给@StefanPochmann拍下我漂亮的答案:这个问题无关紧要,但肯定值得一提的是,拉链可以成对配对.因此,虽然您可以alter在奇数次迭代后正式暂停下面定义,但此时'y'将已经打印出来.
如果您关心这个问题,那么Stefan的解决方案也是如此
>>> alter = map(next, it.cycle((foo1(), foo2())))
Run Code Online (Sandbox Code Playgroud)
这其实非常聪明.
编辑结束
您可以将函数转换为生成器,然后压缩它们.
>>> import itertools as it
>>>
>>> def foo1():
... while True:
... print("x")
... yield None
...
>>> def foo2():
... while True:
... print("y")
... yield None
...
>>> alter = it.chain.from_iterable(zip(foo1(), foo2()))
>>> while True:
... next(alter)
x
y
x
y
...
Run Code Online (Sandbox Code Playgroud)
要么:
>>> for a in alter:
... pass
x
y
x
y
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
181 次 |
| 最近记录: |