Python 使用函数的输出作为函数新迭代的输入
我有一个功能,可以简化为:Python 使用函数的输出作为函数新迭代的输入,python,python-3.x,loops,recursion,Python,Python 3.x,Loops,Recursion,我有一个功能,可以简化为: def do_stuff(a,b,c): a = a*2 b = b*3 c = c return a, b, c 给定初始条件:a=2,b=3,c=1 我想迭代函数,直到a等于64 我正在尝试使用while循环,比如 while True: new_a, new_b, new_c = do_stuff(a, b, c) ... Here is where I am confused ... if new_a =
def do_stuff(a,b,c):
a = a*2
b = b*3
c = c
return a, b, c
给定初始条件:a=2,b=3,c=1
我想迭代函数,直到a等于64
我正在尝试使用while循环,比如
while True:
new_a, new_b, new_c = do_stuff(a, b, c)
... Here is where I am confused ...
if new_a = 64:
return False
如何声明函数的初始值,然后使其在下一次迭代中使用自己的输出作为输入
感谢您的帮助 您可以将递归函数与
if
语句一起使用:
def do_stuff(a,b,c):
global new_a
global new_b
global new_c
new_a = a*2
new_b = b*3
new_c = c
print(new_a,new_b,new_c)
return(new_a,new_b,new_c)
new_a = 2
new_b = 3
new_c = 1
while new_a != 64:
do_stuff(new_a,new_b,new_c)
if new_a == 64:
break
def do_stuff(a, b, c):
if a == 64:
return a, b, c
return do_stuff(a*2, b*3, c)
a, b, c = do_stuff(2, 3, 1)
print((a, b, c))
(64, 729, 1)
请参阅以了解递归的工作原理。特定问题的答案 将函数设为生成器,使用生成器表达式进行过滤,然后对其调用
next
>>> def do_stuff(a,b,c):
...: while True:
...: a = a*2
...: b = b*3
...: c = c
...: yield a, b, c
...:
>>> next((a, b, c) for a, b, c in do_stuff(2, 3, 1) if a == 64)
>>> (64, 729, 1)
为未来读者解答标题中更一般的问题
如何使用一个函数的输出作为另一个函数的新迭代的输入
考虑一次合作!这是一个非常基本的例子
>>> def computation(x):
...: return x%2
>>>
>>> def consumer():
...: while True:
...: got = yield
...: print('consumer got value {}'.format(got))
...: # do something awesome with got
...:
>>>
>>> cons = consumer()
>>> next(cons) # prime coroutine
>>>
>>> for i in range(3):
...: cons.send(computation(i))
consumer got value 0
consumer got value 1
consumer got value 0
如果您想了解有关协同程序的更多信息,请查看David Beazley的精彩演示。如果您想寻找简单的迭代解决方案,请尝试以下方法
def do_stuff(a,b,c):
a = a*2
b = b*3
c = c
return a,b,c
a,b,c = (2,3,1)
while a != 64:
a,b,c = do_stuff(a,b,c)
我的错误,我修正了。这个解决方案有很多问题:没有理由使用全局变量或者从一个你不使用的函数返回一些东西。