将变量从一个函数传递给第二个函数python

时间:2018-07-05 10:34:38

标签: python function

我有两个函数,我需要在第一个函数中计算的变量才能在第二个函数中计算。我最小的工作示例是

import numpy.ma as ma
import numpy as np

data_1 = [0,2,4,6,8,10,12,14,16,18] 
error_1 = [0,1,2,3,4,5,6,7,8,9]

def mask(data,error): 
      product = np.multiply(data,error)

def plot(perc):
    result = ma.masked_array(product, product >= (np.percentile(product, perc)))

mask(data_1,error_1)
plot(30)
plot(60)
plot(90)

这给了我错误

NameError: name 'product' is not defined

我知道“产品”是本地产品。我们假设由于高分辨率和诸如此类的原因,将两个列表相乘会花费大量的计算时间。这就是为什么我要将其放在单独的函数中。当然,我可以将所有内容放在这样的一个函数中:

import numpy.ma as ma
import numpy as np

data_1 = [0,2,4,6,8,10,12,14,16,18] 
error_1 = [0,1,2,3,4,5,6,7,8,9]

def mask(data,error,perc): 
    product = np.multiply(data,error)
    result = ma.masked_array(product, product >= (np.percentile(product, perc)))

掩码(数据_1,错误_1,30) 遮罩(数据_1,错误_1,60) 遮罩(数据_1,错误_1,90)

但是有了这个,我将计算出3次乘积,并且脚本将永远运行。现在清楚了我的问题是什么吗?

2 个答案:

答案 0 :(得分:0)

更改您的函数,以使它们实际上返回值,而不是分配给局部变量(一旦函数退出,它们将被销毁):

def mask(y):
    return y ** 2

def plot(x, z):
    # do something with x here

x = mask(3) 
plot(x, whatever)

答案 1 :(得分:0)

  1. 您在第一个函数中传递了值3,但没有使用它(我的意思是x = 3)
  2. 您在第一个函数中进行了计算,但未返回结果。 x的值是按值传递的,因此它不会改变该函数,而只是在本地。
  3. 您必须在第二个函数中传递值x

    def mask(y):
        return y ** 2
    
    def plot(z, x):
        z = x + 1
        print(z)
    
    x = mask(3)
    plot(3, x)
    

此代码的结果为10。

替代方法:您可以按引用传递值,也可以使用全局变量。