Сохранение переменных Python
Код :
price = 0
def change_price():
price = 1
def show_price():
print(price)
change_price()
show_price()
show_price отдаёт 0. Мне нужно изменять и сохранять переменную, как это сделать? Почему переменная не сохраняется? Если обозначать price = 1 в show_price, отдаст 1.
Я не понимаю в питоне, как это работает?
Ответы (3 шт):
В функции change_price переменная price является локальной, потому что Вы не сказали, что эту переменную необходимо искать в глобальной области видимости. Для этого перед изменением переменой скажите интерпретатору, что она глобальная:
def f():
global price
price = 1
Но использование глобальных переменных это очень плохая практика, этого стоит избегать.
Во второй функции переменная тоже сначала ищется в локальной области видимости, не находится и только после этого ищется в глобальной.
Есть 2 варианта.
Использовать global(что не очень хорошая практика)
price = 0
def change_price():
global price
price = 1
def show_price():
print(price)
change_price()
show_price()
Либо передать переменную аргументом функции и использовать return:
price = 0
def change_price(price):
price = 1
return price
def show_price(price):
print(price)
price = change_price(price)
show_price(price)
class Price:
def __init__(self, value=0):
self.value: float
self.value = value
def increase(self, value) -> None:
self.value += value
p = Price(152)
print(p.value)
p.increase(20)
print(p.value)
# 152
# 172