Трюк дня. Словарный метод get() и его аргументы
Когда вы вызываете метод get(), он проверяет, есть ли в словаре указанный ключ.
Если ключ есть, возвращается его значение.
Если ключа нет, возвращается значение, установленное по умолчанию. Чтобы установить значение по умолчанию, его нужно передать в метод в качестве второго аргумента.
name_for_userid = {
382: "Alice",
590: "Bob",
951: "Dilbert",
}
def greeting(userid):
return f'Hi {name_for_userid.get(userid, "there")}!'
>>> greeting(382)
"Hi Alice!"
>>> greeting(333333)
"Hi there!"
#tips #tricks
Когда вы вызываете метод get(), он проверяет, есть ли в словаре указанный ключ.
Если ключ есть, возвращается его значение.
Если ключа нет, возвращается значение, установленное по умолчанию. Чтобы установить значение по умолчанию, его нужно передать в метод в качестве второго аргумента.
name_for_userid = {
382: "Alice",
590: "Bob",
951: "Dilbert",
}
def greeting(userid):
return f'Hi {name_for_userid.get(userid, "there")}!'
>>> greeting(382)
"Hi Alice!"
>>> greeting(333333)
"Hi there!"
#tips #tricks
Трюк дня. Разница между is и ==
Выражение с "is" дает результат True, если две переменные указывают на один и тот же объект. Выражение с "==" дает результат True, если объекты, на которые ссылаются переменные, равны.
>>> a = [1, 2, 3]
>>> b = a
>>> a is b
True
>>> a == b
True
>>> c = list(a)
>>> a == c
True
>>> a is c
False
#tips #tricks
Выражение с "is" дает результат True, если две переменные указывают на один и тот же объект. Выражение с "==" дает результат True, если объекты, на которые ссылаются переменные, равны.
>>> a = [1, 2, 3]
>>> b = a
>>> a is b
True
>>> a == b
True
>>> c = list(a)
>>> a == c
True
>>> a is c
False
#tips #tricks
Трюк дня. Красивый вывод словарей с помощью json.dumps()
Стандартно пары ключей и значений в словаре выводятся в одну строку. В таком виде их тяжело читать:
>>> my_mapping = {'a': 23, 'b': 42, 'c': 0xc0ffee}
>>> my_mapping
{'b': 42, 'c': 12648430. 'a': 23}
Модуль json может справиться с этой задачей получше:
>>> import json
>>> print(json.dumps(my_mapping, indent=4, sort_keys=True))
{
"a": 23,
"b": 42,
"c": 12648430
}
Обратите внимание, что это работает только со словарями, содержащими примитивные типы:
>>> json.dumps({all: 'yup'})
TypeError: keys must be a string
#tips #tricks
Стандартно пары ключей и значений в словаре выводятся в одну строку. В таком виде их тяжело читать:
>>> my_mapping = {'a': 23, 'b': 42, 'c': 0xc0ffee}
>>> my_mapping
{'b': 42, 'c': 12648430. 'a': 23}
Модуль json может справиться с этой задачей получше:
>>> import json
>>> print(json.dumps(my_mapping, indent=4, sort_keys=True))
{
"a": 23,
"b": 42,
"c": 12648430
}
Обратите внимание, что это работает только со словарями, содержащими примитивные типы:
>>> json.dumps({all: 'yup'})
TypeError: keys must be a string
#tips #tricks
Трюк дня. Как поменять местами значения переменных
Допустим, нам нужно поменять местами значения переменных a и b.
a = 23
b = 42
"Классический" способ сделать это предполагает использование временной переменной:
tmp = a
a = b
b = tmp
Но Python также допускает использование короткой формы:
a, b = b, a
#tips #tricks
Допустим, нам нужно поменять местами значения переменных a и b.
a = 23
b = 42
"Классический" способ сделать это предполагает использование временной переменной:
tmp = a
a = b
b = tmp
Но Python также допускает использование короткой формы:
a, b = b, a
#tips #tricks
Трюк дня. Одновременная проверка нескольких флагов
В Python проверить несколько флагов одновременно можно разными способами:
x, y, z = 0, 1, 0
if x == 1 or y == 1 or z == 1:
print('passed')
if 1 in (x, y, z):
print('passed')
Следующие два способа подходят только для проверки на истинность:
if x or y or z:
print('passed')
if any((x, y, z)):
print('passed')
#tips
В Python проверить несколько флагов одновременно можно разными способами:
x, y, z = 0, 1, 0
if x == 1 or y == 1 or z == 1:
print('passed')
if 1 in (x, y, z):
print('passed')
Следующие два способа подходят только для проверки на истинность:
if x or y or z:
print('passed')
if any((x, y, z)):
print('passed')
#tips
Трюк дня. Распаковка аргументов функции
def myfunc(x, y, z):
print(x, y, z)
tuple_vec = (1, 0, 1)
dict_vec = {'x': 1, 'y': 0, 'z': 1}
>>> myfunc(*tuple_vec)
1, 0, 1
>>> myfunc(**dict_vec)
1, 0, 1
#tips
def myfunc(x, y, z):
print(x, y, z)
tuple_vec = (1, 0, 1)
dict_vec = {'x': 1, 'y': 0, 'z': 1}
>>> myfunc(*tuple_vec)
1, 0, 1
>>> myfunc(**dict_vec)
1, 0, 1
#tips
Трюк дня. Лямбда-функции
В Python есть ключевое слово lambda, позволяющее коротко объявлять маленькие и анонимные функции:
>>> add = lambda x, y: x + y
>>> add(5, 3)
8
Лямбда-функции состоят из одного выражения, причем они не обязательно привязаны к какому-нибудь имени (могут быть анонимными). Лямбда-функции всегда содержат неявный
Ту же самую функцию add() можно было бы объявить при помощи ключевого слова def:
>>> def add(x, y):
return x + y
>>> add(5, 3)
8
Так что же такого особенного в lambda? Лямбда-функции являются «функциональными выражениями»:
>>> (lambda x, y: x + y)(5, 3)
8
#tips
В Python есть ключевое слово lambda, позволяющее коротко объявлять маленькие и анонимные функции:
>>> add = lambda x, y: x + y
>>> add(5, 3)
8
Лямбда-функции состоят из одного выражения, причем они не обязательно привязаны к какому-нибудь имени (могут быть анонимными). Лямбда-функции всегда содержат неявный
return
.Ту же самую функцию add() можно было бы объявить при помощи ключевого слова def:
>>> def add(x, y):
return x + y
>>> add(5, 3)
8
Так что же такого особенного в lambda? Лямбда-функции являются «функциональными выражениями»:
>>> (lambda x, y: x + y)(5, 3)
8
#tips
Трюк дня. Встроенные методы Python: globals() и locals()
"globals()" возвращает словарь со всеми глобальными переменными в текущей области видимости:
>>> globals()
{...}
"locals()" делает то же самое, но для всех локальных переменных в текущей области видимости:
>>> locals()
{...}
#tips
"globals()" возвращает словарь со всеми глобальными переменными в текущей области видимости:
>>> globals()
{...}
"locals()" делает то же самое, но для всех локальных переменных в текущей области видимости:
>>> locals()
{...}
#tips
Трюк дня. Использование срезов без указания индексов
В Python синтаксис срезов списков допускает отсутствие индексов. Это можно применить с пользой:
Можно очистить список от всех элементов:
>>> lst = [1, 2, 3, 4, 5]
>>> del lst[:]
>>> lst
[]
Можно заменить все элементы списка, не создавая новый объект:
>>> a = lst
>>> lst[:] = [7, 8, 9]
>>> lst
[7, 8, 9]
>>> a
[7, 8, 9]
>>> a is lst
True
Можно также создать копию списка (поверхностную):
>>> b = lst[:]
>>> b
[7, 8, 9]
>>> b is lst
False
#tips
В Python синтаксис срезов списков допускает отсутствие индексов. Это можно применить с пользой:
Можно очистить список от всех элементов:
>>> lst = [1, 2, 3, 4, 5]
>>> del lst[:]
>>> lst
[]
Можно заменить все элементы списка, не создавая новый объект:
>>> a = lst
>>> lst[:] = [7, 8, 9]
>>> lst
[7, 8, 9]
>>> a
[7, 8, 9]
>>> a is lst
True
Можно также создать копию списка (поверхностную):
>>> b = lst[:]
>>> b
[7, 8, 9]
>>> b is lst
False
#tips