将函数返回的一些随机值传递给另一个函数

时间:2016-11-12 23:48:15

标签: python

我遇到的情况是我需要传递一个从函数返回到另一个函数的值(总是随机/不同的),并且调用函数的顺序是未定义的,因为它将被计算在运行时根据用户输入。

例如,

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中的值。

但这似乎是一个不推荐的解决方案,至少我是这么认为的。

如果我无法正确解释我的情况,请允许我编辑或详细说明这个问题。

谢谢

1 个答案:

答案 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()