Охватывающая (Enclosing)
Позволяет «выходить» из локальной о.в. на верхний уровень — но не глобальный. Допустим, у нас есть функция
Такие звери нужны, если вы используете вложенные функции, что в целом случается нечасто. Самый простой пример употребления – цикл внутри цикла, счетчик i и снаружи, и внутри.
Позволяет «выходить» из локальной о.в. на верхний уровень — но не глобальный. Допустим, у нас есть функция
func1()
, в которой определена еще одна функция func2()
. Оператор nonlocal
позволяет внутренней переменной enclosing
выйти на уровень видимости «верховной» функции.Такие звери нужны, если вы используете вложенные функции, что в целом случается нечасто. Самый простой пример употребления – цикл внутри цикла, счетчик i и снаружи, и внутри.
Локальная (Local) и глобальная (Global)
Сразу видно глобальную переменную – global. Она удобна в использовании, но не безопасна. При разрастающемся коде легко добиться ситуации, что переменная меняется несколько раз, и это создает лазейки для ее перезаписи всем желающим. Впрочем, за семь лет программирования проблемных ситуаций на этой почве у меня не возникло ни разу. Но информационной безопасностью не занимаюсь.
Заполучить вторую переменную local в сниппете ниже можно только при вызове func().
Сразу видно глобальную переменную – global. Она удобна в использовании, но не безопасна. При разрастающемся коде легко добиться ситуации, что переменная меняется несколько раз, и это создает лазейки для ее перезаписи всем желающим. Впрочем, за семь лет программирования проблемных ситуаций на этой почве у меня не возникло ни разу. Но информационной безопасностью не занимаюсь.
Заполучить вторую переменную local в сниппете ниже можно только при вызове func().
Что нового в Python 3.12. TypedDict для определения типов **kwargs
Если вам доводилось налегать на kwargs (keyword arguments – аргументы c ключевыми словами), то вы помните, что оператор двойная звездочка издавна упаковывает аргументы, переданные по имени, в словарь.
Теперь мы можем использовать
Если вам доводилось налегать на kwargs (keyword arguments – аргументы c ключевыми словами), то вы помните, что оператор двойная звездочка издавна упаковывает аргументы, переданные по имени, в словарь.
Теперь мы можем использовать
TypedDict
(буквально – словарь с заданными типами значений) для того, чтобы такие аргументы получили большую свободу типов.TypeVarTuple
Допустим, мы создаём функцию
TypeVarTuple представляет собой произвольный кортеж потенциально разных типов. Полезно, если функция имеет дело только с первым элементом кортежа, и нам «разрешит» любые оставшиеся типы.
Допустим, мы создаём функцию
convert_first_int()
, которая возвращает кортеж практически неизменным, только первый элемент приводит к целочисленному типу.TypeVarTuple представляет собой произвольный кортеж потенциально разных типов. Полезно, если функция имеет дело только с первым элементом кортежа, и нам «разрешит» любые оставшиеся типы.
Проверка существования переменной с помощью «моржового» оператора
Если мы объявили две переменные, но не задали любой из них значение, то с помощью оператора
Во втором случае заполнена только одна из переменных, но программа отработает без ошибки.
Если мы объявили две переменные, но не задали любой из них значение, то с помощью оператора
:=
(Walrus Operator) можно спасти программу от падения и добавить обрабатывающую логику. В первом случае, в переменные name1, name2 мы ничего не записали, значит, программа зайдет в блок else.Во втором случае заполнена только одна из переменных, но программа отработает без ошибки.