Значения по умолчанию устанавливаются при объявлении функции, а не при ее запуске. Это может привести к неожиданному поведению при изменении переменных:
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