【问题标题】:Put a variable as an argument of a function将变量作为函数的参数
【发布时间】:2020-09-13 16:20:47
【问题描述】:

所以我需要使用一个变量(n)作为另一个函数(参数)的默认值。

def fit(X_train,Y_train):
   df=pd.DataFrame(np.column_stack((X_train, Y_train)))
   global n
   var=parameters()
   n = df.shape[1] - 1

我想将 'n' 的值用作下面给出的函数 'parameter' 作为默认参数的参数。我必须将一个全局变量声明为 n=0,否则会报错,提示名称 n 未定义。

def parameters(degree = 1, nof = n):
   global d
   d=degree
   f=n
   nof=f
   return nof

现在 'f' 始终具有来自函数 fit 的 n 值。因此,每当我在调用函数参数nof 时输入另一个nof 值时,都会将自身更改为n 的值。 只有当用户没有为 nof 指定任何值时,我才希望 nof 的值为 'n'。有什么办法吗?

【问题讨论】:

标签: python function arguments parameter-passing


【解决方案1】:

默认值是在声明函数时设置的,而不是在运行时设置的。当您修改变量时,这可能会导致令人惊讶的行为:

n = 1

def parameters(nof = n):  # The default argument is n, but...
   return nof

n = 5

print(parameters())  # This prints 1, not 5!

与其将默认变量设置为n,不如只在函数运行时应用该默认值,使用None 作为占位符:

def parameters(nof = None):
    if nof is None:
        nof = n  # The 'global' keyword isn't necessary, but you can include it to be explicit

    return nof

或者,如果您只在fit 函数内部使用parameters 函数,您可以将其设为内部函数以避免处理全局变量。这个内部函数将自动访问外部函数的作用域:

def fit():
   n = 0  # Not global scoped

   def parameters(nof = None):
       if nof is None:
           nof = n  # This is the same 'n' defined above
       return nof

   var = parameters()  # This returns 0
   n = 1
   var = parameters()  # This returns 1

【讨论】:

  • 非常感谢您的回答。问题是函数参数总是会在函数拟合之前被调用,其中 n 得到它的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-19
  • 2013-12-23
  • 2014-12-28
  • 1970-01-01
  • 2011-06-12
  • 2014-03-08
相关资源
最近更新 更多