Почему изменение списка 'y' изменяет также список 'x'
Вы, возможно, будете удивлены тому, что добавление в
Два факта приводят к такому результату:
• Переменные - это просто ссылки на объекты.
• Списки изменяемы.
Вы, возможно, будете удивлены тому, что добавление в
y
изменяет также и x
.Два факта приводят к такому результату:
• Переменные - это просто ссылки на объекты.
y = x
не создаёт копию списка - это просто создаёт переменную y
, которая ссылается на тот же объект, что и x
.• Списки изменяемы.
Как можно узнать имя объекта
Вообще говоря, никак, поскольку объекты в действительности не имеют имён. Важно: присваивание всегда связывает имя с объектом. Это верно и для инструкций
Возможно, класс имеет имя: однако, хотя он связан с двумя именами и запрашивается через имя
Вообще говоря, никак, поскольку объекты в действительности не имеют имён. Важно: присваивание всегда связывает имя с объектом. Это верно и для инструкций
def
и class
.Возможно, класс имеет имя: однако, хотя он связан с двумя именами и запрашивается через имя
B
, созданный экземпляр всё ещё считается экземпляром класса A
. Однако, невозможно сказать, имя экземпляра a
или b
, поскольку оба они связаны с одним и тем же значением.Какой приоритет у оператора "запятая"
Запятая не является оператором в Python. Поскольку запятая - не оператор, но разделитель между выражениями, если бы было введено:
Запятая не является оператором в Python. Поскольку запятая - не оператор, но разделитель между выражениями, если бы было введено:
("a"
in "b"), "a"
А не"a"
in ("b", "a")
То же самое верно и для операторов присваивания (=
, +=
и другие). Они не являются операторами как таковыми, а лишь синтаксическими разделителями в операциях присваивания.Как использовать строки для вызова функций/методов
Существует несколько приёмов.
Лучший - использование словаря, ставящего соответствие строке функцию. Его главное достоинство - строки не обязаны совпадать с названиями функций. Использование встроенной функции getattr. И использование locals или eval (не рекомендуется).
Существует несколько приёмов.
Лучший - использование словаря, ставящего соответствие строке функцию. Его главное достоинство - строки не обязаны совпадать с названиями функций. Использование встроенной функции getattr. И использование locals или eval (не рекомендуется).
Проверка принадлежности элемента данной коллекции c помощью оператора in
x in s — вернет True, если элемент входит в коллекцию s и False — если не входит
Есть и вариант проверки не принадлежности: x not in s, где есть по сути, просто добавляется отрицание перед булевым значением предыдущего выражения.
x in s — вернет True, если элемент входит в коллекцию s и False — если не входит
Есть и вариант проверки не принадлежности: x not in s, где есть по сути, просто добавляется отрицание перед булевым значением предыдущего выражения.
Особые методы сравнения множеств (set, frozenset)
set_a.isdisjoint(set_b) — истина, если set_a и set_b не имеют общих элементов.
set_b.issubset(set_a) — если все элементы множества set_b принадлежат множеству set_a, то множество set_b целиком входит в множество set_a и является его подмножеством (set_b — подмножество)
set_a.issuperset(set_b) — соответственно, если условие выше справедливо, то set_a — надмножество
set_a.isdisjoint(set_b) — истина, если set_a и set_b не имеют общих элементов.
set_b.issubset(set_a) — если все элементы множества set_b принадлежат множеству set_a, то множество set_b целиком входит в множество set_a и является его подмножеством (set_b — подмножество)
set_a.issuperset(set_b) — соответственно, если условие выше справедливо, то set_a — надмножество