en
Feedback
Python Hub - сборище Питонистов

Python Hub - сборище Питонистов

Open in Telegram

Уголок счастья для любого питониста. Сотрудничество или заказы: @leshunist https://shcoder.dev - студия разработки ShcoderDevelopment https://t.me/pythonhub_chat - чат

Show more
1 752
Subscribers
-324 hours
+27 days
+430 days
Posts Archive
Новый способ монетизации своих ботов без всяких ЮР. лиц, ип, ОАО, ЗАО бещеки и так далее. https://youtu.be/SWD0LZwc_kQ

🌟 Global и Nonlocal в Python 🌟 Привет, питонисты! 👋 Сегодня разберём тему, которая частенько вызывает головную боль даже у
🌟 Global и Nonlocal в Python 🌟 Привет, питонисты! 👋 Сегодня разберём тему, которая частенько вызывает головную боль даже у опытных разработчиков — области видимости переменных и ключевые слова global и nonlocal. 🤔 В чём суть? Представьте, что вы пишете функцию внутри функции (да, такое бывает!), и вам нужно изменить переменную "снаружи". Без special words Python скажет: "Неа, не получится!" 😅 🎯 Как это работает? ✨ Global:
x = 5  # глобальная переменная

def change_x():
    global x  # говорим Python, что хотим менять глобальную x
    x = 10    # теперь работает!

change_x()
print(x)  # выведет 10
🎈 Nonlocal:
def outer():
    counter = 0  # переменная внешней функции
    
    def inner():
        nonlocal counter  # хотим менять counter из outer
        counter += 1      # работает!
    
    inner()
    print(counter)  # выведет 1

outer()
⚡️ Важные моменты: ➡️ Global можно использовать для создания новых переменных ➡️ Nonlocal работает только с существующими переменными ➡️ В Python 3.13 пофиксили баги с global в блоках else и except 🚫 Типичные ошибки: ❌ Неправильно:
def bad_function():
    print(x)    # ошибка!
    global x    # global нужно объявлять до использования
    x = 10
✅ Правильно:
def good_function():
    global x
    print(x)    # теперь всё ок
    x = 10
🛠 Полезные инструменты: Чтобы проверить, какие переменные у вас есть:
print(globals())  # все глобальные переменные
print(locals())   # все локальные переменные
💡 Практические советы: - ✨ Используйте global только когда действительно необходимо - ✨ Nonlocal отлично подходит для счетчиков и аккумуляторов - ✨ Всегда документируйте использование global и nonlocal в комментариях - ✨ Старайтесь минимизировать использование глобальных переменных

Что выдаст код выше?
Anonymous voting

🥳🥳🥳🥳 Пишите идеи, актуальные вам, для видосов в комментах. https://youtu.be/CGvEkb7CazM

Бедный Тимми
+2
Бедный Тимми

Ура. Разбираемся, как компоновать виджеты во Flet. Накидывайте идей, что еще сделать! https://youtu.be/aJ2VYQy57jg

Мораль😎 Атрибуты класса (count) являются общими для всех экземпляров класса. Метод __del__ вызывается автоматически, когда объект уничтожается (например, после выполнения del или когда программа завершается). Если объект больше не имеет ссылок, он удаляется сборщиком мусора, и вызывается деструктор.

Что выдаст код выше?
Anonymous voting

Разбор 😎 Здесь мы имеем дело с объектами и ссылками в Python. Когда создается объект класса A (a = A()), переменная a ссылается на этот объект. Затем переменной b присваивается ссылка на тот же объект (b = a). Это означает, что a и b ссылаются на один и тот же объект в памяти. Когда вызывается метод update через переменную b, он изменяет атрибут x этого объекта, увеличивая его значение на 5. Поскольку a и b ссылаются на один и тот же объект, изменение видно через обе переменные. Таким образом, после выполнения b.update(5) значение x становится равным 15, и вывод будет 15 15.

Что выдаст код выше?
Anonymous voting

Разбор 😎 В Python списки — это изменяемые объекты. Когда мы присваиваем y = x, переменная y начинает ссылаться на тот же объект в памяти, что и x. Поэтому любые изменения, сделанные через y, отразятся и на x. В данном случае вызов y.append(4) добавляет элемент 4 в конец списка, на который ссылаются обе переменные. Таким образом, вывод будет [1, 2, 3, 4].

Что выдаст код выше?
Anonymous voting

Разбор😎 Lambda-функции в списке захватывают переменную i из внешней области видимости , а не её значение на момент создания. После завершения цикла i становится равным 2 (последнее значение в range(3)). Поэтому все функции используют i = 2, и результат для любого вызова funcs[n](1) будет 1 + 2 = 3. Это типичная "ловушка" при работе с замыканиями в циклах.

Что выдаст код выше?
Anonymous voting

Разбор😎 Список lst по умолчанию создается один раз при определении функции, а не при каждом вызове. Поэтому при первом вызове add_to_list(1) список становится [1], а при втором вызове add_to_list(2) к тому же списку добавляется 2, итог — [1, 2]. Это классическая ловушка с изменяемыми аргументами по умолчанию в Python.