在另一个函数中使用函数的变量

时间:2017-09-24 00:12:01

标签: python

我有以下函数来计算两个不同的东西:

def LCM(X0, a, c, m, n):  #Generates "n" numbers of random numbers# with given parameters.
    X = []
    X.append(X0)
    for i in range(n):
        X.append(float((a*X[i]+c) % m))
        X[i] = X[i]/m
    del X[0]
    X[n-1] = X[n-1]/m

    plt.hist(X)
    plt.title("LCM Frequency Histogram")
    plt.show()
    print "For this example, the LCM generated a good quality uniform distribution." 
    print "However, it should be also noted that every 2000 generations," 
    print "the numbers are repeated."
    return X[:10] #Show only the first 10 values of the list.

def exponential(lambdavalue):
    Z =[]
    for i in range(10000):
        Z.append(float(-(1/lambdavalue)*math.log(1-X[i])))
    plt.hist(Z)
    plt.title("Exponential Frequency Histogram")
    plt.show()
    return Z[:10] #Show only the first 10 values of the list.

在第一个函数中,我计算变量X,然后在第二个函数中找到基于X的Z并绘制其直方图。我无法理解如何将变量X传递给第二个函数。我正在运行以下第一个函数:

LCM(27, 17, 9, 10000, 10000)

这是第二次:

exponential(10)

我也知道我可以使用一些软件包来制作这些东西(LCM随机生成和exp分发),但是,我想做一些练习。

3 个答案:

答案 0 :(得分:4)

由于您从第一个函数返回X值,您可以将它们传递给第二个函数,如下所示:

X = LCM(27, 17, 9, 10000, 10000)
Z = exponential(X, 10)

您只需要为exponential添加一个参数来获取X值。

答案 1 :(得分:0)

您需要将从LCM函数返回的值传递给变量,以便执行 -

x = lcm(27, 17, 9, 10000, 10000)

然后将x的值作为参数传递给指数函数 -

x = exponential(10)

另一种方法是你可以在你的函数之外声明一个全局变量X = [],你可以在两个函数中使用它们。没有把它作为第二个论点。

答案 2 :(得分:0)

您可以在其他函数中使用全局变量,方法是在分配给它的每个函数中将其声明为全局变量:

/:category

并期望1.相反,您需要声明您打算使用全局x:

x = 0
def f():
    x = 1
f()
print x #=>0

我希望它会对你有所帮助。或者至少让你更接近解决方案。