我遇到的情况是我需要传递一个从函数返回到另一个函数的值(总是随机/不同的),并且调用函数的顺序是未定义的,因为它将被计算在运行时根据用户输入。
例如,
def func1(some_value):
# Use some_value for whatever purpose
# Some code
return some_random_value
def func2(some_value):
# Use some_value for whatever purpose
# Some code
return some_random_value
def func3(some_value):
# Use some_value for whatever purpose
# Some code
return some_random_value
因此,假设首先调用func2
,任何初始/默认值都作为参数some_value
传递,函数将返回some_random_value
。现在,我不知道接下来会调用哪个函数,但无论调用哪个函数,从前一个函数返回的some_random_value
(在这种情况下为func2
)都应该作为参数some_value
传递到下一个被调用的函数(让它为func1
)。这个过程一直在继续。
实现这一目标的推荐方法是什么?是否应该使用全局变量来完成,每次函数运行以存储函数的返回值时,其值都会被修改?如果是,那怎么办?
更具体地说
CLI将允许用户选择某个操作,并根据此操作调用相应的功能。函数的最后返回值应该在内存中,直到应用程序结束。函数执行任务后,它将返回一个值。使用CLI操作调用任何其他函数时,该值是必需的。同样,下一个函数将使用最后一个函数的返回值处理一些数据,然后返回一些处理后的值,稍后将由下一个函数或CLI操作使用。
我在想,而不是从任何这些函数返回值,创建一个具有默认值的全局变量:
common_data = 'some string'
然后在每个函数定义中添加:
global common_data
common_data = 'new processed string'
这将确保任何下一个函数调用将传递上一个函数最后保存在common_data中的值。
但这似乎是一个不推荐的解决方案,至少我是这么认为的。
如果我无法正确解释我的情况,请允许我编辑或详细说明这个问题。
谢谢
答案 0 :(得分:0)
我将提供此递归错误。 ^^
from random import choice
from random import randint
def get_fs(f):
return [x for x in (func1, func2, func3) if x != f]
def func1(some_value, fs):
# Use some_value for whatever purpose
# Some code
f = choice(fs)
print("func1", f.__name__)
return f(randint(1,10), get_fs(func1))
def func2(some_value, fs):
# Use some_value for whatever purpose
# Some code
f = choice(fs)
print("func2", f.__name__)
return f(randint(1,10), get_fs(func2))
def func3(some_value, fs):
# Use some_value for whatever purpose
# Some code
f = choice(fs)
print("func3", f.__name__)
return f(randint(1,10), get_fs(func3))
def main():
functions = [func2, func3]
func1(randint(1,10), functions)
if __name__ == '__main__':
main()