Сохранение переменных 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

Но использование глобальных переменных это очень плохая практика, этого стоит избегать.


Во второй функции переменная тоже сначала ищется в локальной области видимости, не находится и только после этого ищется в глобальной.

→ Ссылка
Автор решения: n1tr0xs

Есть 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)
→ Ссылка
Автор решения: Wairua
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
→ Ссылка