Поместите переменную как аргумент функции - PullRequest
1 голос
/ 26 мая 2020

Поэтому мне нужно использовать переменную (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' как аргумент функции 'параметр' , указанный ниже в качестве аргумента по умолчанию. Я должен объявить глобальную переменную как n = 0, в противном случае выдает ошибку, говоря, что имя n не определено.

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

Теперь 'f' всегда имеет значение n из функции подходят. Следовательно, всякий раз, когда я помещаю другое значение nof при вызове функции, параметр nof изменяется на значение n . Я хочу, чтобы значение nof было 'n' только тогда, когда пользователь не указывает никаких значений для nof . Есть ли способ сделать это?

1 Ответ

0 голосов
/ 27 мая 2020

Значения по умолчанию устанавливаются при объявлении функции, а не при ее запуске. Это может привести к неожиданному поведению при изменении переменных:

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

В качестве альтернативы, если вы используете только функцию parameters внутри функции fit, вы можете сделать ее внутренней функцией, чтобы избежать работы с глобальными переменными. Эта внутренняя функция автоматически получит доступ к области внешней функции:

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
...