PythonBoost - сообщество питонистов
13.4K subscribers
340 photos
5 videos
592 links
Лучший Python телеграм канал для новичков.

Цель: подготовка студентов, начинающих питонистов к нахождению первой работы.

Канал не для senior python developers и даже не для middle, хотя и вам будет что посмотреть.

С рекламой: @anothertechrock
@aldrson
Download Telegram
Трюк дня. Словарный метод 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
Трюк дня. List Comprehension

vals = [expression
for value in collection
if condition]

Это то же самое, что и

vals = []
for value in collection:
if condition:
vals.append(expression)

Пример:

>>> even_squares = [x * x for x in range(10) if not x % 2]
>>> even_squares
[0, 4, 16, 36, 64]

#tips #tricks
Трюк дня. Сортировка словаря Python по значению

>>> xs = {'a': 4, 'b': 3, 'c': 2, 'd': 1}

>>> sorted(xs.items(), key=lambda x: x[1])
[('d', 1), ('c', 2), ('b', 3), ('a', 4)]

Или:

>>> import operator
>>> sorted(xs.items(), key=operator.itemgetter(1))
[('d', 1), ('c', 2), ('b', 3), ('a', 4)]

#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
Трюк дня. Красивый вывод словарей с помощью 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
Трюк дня. Как поменять местами значения переменных

Допустим, нам нужно поменять местами значения переменных 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
Трюк дня. Распаковка аргументов функции

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

Лямбда-функции состоят из одного выражения, причем они не обязательно привязаны к какому-нибудь имени (могут быть анонимными). Лямбда-функции всегда содержат неявный 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
Трюк дня. Использование срезов без указания индексов

В 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 3.5+:

>>> x = {'a': 1, 'b': 2}
>>> y = {'b': 3, 'c': 4}

>>> z = {**x, **y}

>>> z
{'c': 4, 'a': 1, 'b': 3}

В Python 2.x :

>>> z = dict(x, **y)
>>> z
{'a': 1, 'c': 4, 'b': 3}

В этих примерах Python мержит ключи словарей в порядке, указанном в выражении. При этом дубликаты перезаписываются слева направо.

#tips
Трюк дня. Символы Unicode в именах переменных

Python 3 позволяет использовать символы Unicode в именах переменных:

>>> π = math.pi
>>> class Spin̈alTap: pass
>>> Spin̈alTap()
<Spin̈alTap object at 0x10e58d908>

Но допускаются только буквенные символы:

>>> 🍺 = "beer"
SyntaxError:
"invalid character in identifier"

Это точно не стоит использовать в продакшене, но для личных экспериментов может быть интересно.

#tips