我有两个函数,我需要在第一个函数中计算的变量才能在第二个函数中计算。我最小的工作示例是
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次乘积,并且脚本将永远运行。现在清楚了我的问题是什么吗?
答案 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)
您必须在第二个函数中传递值x
def mask(y):
return y ** 2
def plot(z, x):
z = x + 1
print(z)
x = mask(3)
plot(3, x)
此代码的结果为10。
替代方法:您可以按引用传递值,也可以使用全局变量。