【问题标题】:Accessing a variable inside a function for calculation访问函数内部的变量进行计算
【发布时间】:2020-02-12 19:17:45
【问题描述】:

我试图从函数内部访问一个变量,它给了我一个错误,上面写着:

NameError: name 'perm_sample_1' is not defined

代码在这里:

def permutation_sample(data1,data2):
    data = np.concatenate((data1,data2))
    permuted_data = np.random.permutation(data)
    perm_sample_1 = permuted_data[:len(data1)]
    perm_sample_2 = permuted_data[len(data1):]
    return perm_sample_1 , perm_sample_2
    #return perm_sample_1.shape ,perm_sample_2.shape

def draw_perm_reps_func_diff(data1,data2,func,size=1):
    perm_replicates = np.empty(size)
    for i in range(size):
        perm_sample_1 , perm_sample_2 = permutation_sample(data1,data2)
        perm_replicates[i] = func(perm_sample_1) - func(perm_sample_2)
    return perm_replicates

stats.ttest_ind_from_stats(mean1=np.mean(perm_sample_1), std1=np.std(perm_sample_1), nobs1=len(perm_sample_1),mean2=np.mean(perm_sample_2), std2=np.std(perm_sample_2), nobs2=len(perm_sample_2))

【问题讨论】:

  • 除非事先在函数中声明global,否则其中的变量默认是本地,不能在其外部引用。您可以返回该值,然后调用者可以使用它来做事(而不是使用通常被认为是糟糕的编程习惯的全局变量)。看起来您正在这样做,因为您的问题没有显示完整的回溯,这将表明 NameError 发生的位置。
  • 谢谢@martineau 那么如何在最后运行引用函数内部使用的变量的计算?
  • how can I - 给函数添加参数,在调用函数时传递。
  • 由于您没有显示draw_perm_reps_func_diff() 的调用位置以及它与最后一行的关系,我不知道。
  • 代码链接:easyupload.io/mqgxkb

标签: python function permutation replicate


【解决方案1】:

我假设错误是在最后一行抛出的(请在以后提供有意义的堆栈跟踪):

变量perm_sample_1 超出了函数调用的范围。您必须在函数之外定义它才能访问它。

一种方法是在draw_perm_reps_func_diff(...) 中将其返回到另一个值。虽然,对此有更漂亮的解决方案。

【讨论】:

  • 我尝试了以下方法:``` def draw_perm_reps_func_diff(data1,data2,func,size=1): perm_replicates = np.empty(size) for i in range(size): perm_sample_1 , perm_sample_2 = permutation_sample(data1,data2) perm_replicates[i] = func(perm_sample_1) - func(perm_sample_2) return perm_sample_1 return perm_sample_2 return perm_replicates ``` 这不起作用。它说 perm_sample_1 未定义
  • NameError Traceback (most recent call last) <ipython-input-69-b6d0de005a93> in <module> ----> 1 stats.ttest_ind_from_stats(mean1=np.mean(perm_sample_1), std1=np.std(perm_sample_1), nobs1=len(perm_sample_1), 2 mean2=np.mean(perm_sample_2), std2=np.std(perm_sample_2), nobs2=len(perm_sample_2)) NameError: name 'perm_sample_1' is not defined
【解决方案2】:

我需要做的就是运行函数调用函数外部的变量

def func(a,b):
    c = a+b 
    d = b+5
    return c , d

z , y = func(12,5)

e =  z*2
f =  y/5

我应该得到 e = 34 f = 2

【讨论】:

    猜你喜欢
    • 2015-04-29
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    相关资源
    最近更新 更多