У меня есть два файла main.py и val.py. Значение берется из val.py в основном файле, а затем я хочу обновить переменную в исходном файле. Затем используйте это значение в дальнейших расчетах. Каждый раз, когда я вызываю функцию, я хочу получить обновленное значение, а не начальное значение. Но здесь я получаю только начальное значение.

Val.py

num = 0

#update the original value
def update(num):
  num +=1
  return 

#get the current 'num' value
def current():
  return num

Main.py

import val

val.update(val.current())

print(val.current())

Глобальная переменная не обновляется. Кажется, я не могу понять здесь правильную проблему. Я также передаю значения в функции в качестве аргументов. Было бы очень полезно, если бы кто-нибудь мог хоть намекнуть.

0
Anandakrishnan 27 Ноя 2021 в 08:36
AFAIK, когда вы делаете num +=1, вы создаете копию num, потому что целые числа неизменяемы: id(num) => 4511967504; num+=1; id(num) => 4511967536. Я не думаю, что возможно обновить целое число, переданное в качестве аргумента другой функции.
 – 
ForceBru
27 Ноя 2021 в 09:05
Есть ли обходной путь?
 – 
aei_kay
27 Ноя 2021 в 09:07
1
Использование global, как в ответе ниже, вероятно, является самым чистым решением.
 – 
ForceBru
27 Ноя 2021 в 09:09

1 ответ

Лучший ответ

В update() вы затенили переменную модуля num локальной переменной, которая также называется num. Если вы избавитесь от него и используете ключевое слово global, вы можете изменить значение модуля num.

num = 0

def update():
    global num
    num += 1
3
rchome 27 Ноя 2021 в 09:04
Понятно. Спасибо.
 – 
aei_kay
27 Ноя 2021 в 09:10
Другой запрос, но почему current() возвращает правильное обновленное значение без использования глобального ключевого слова?
 – 
aei_kay
27 Ноя 2021 в 09:38
1
Ключевое слово global позволяет вам изменять переменную за пределами вашей функции. Если вы только читаете переменную, она вам не нужна.
 – 
rchome
27 Ноя 2021 в 09:49