Перейти к содержанию

Хитрости

Ссылки

Общие

Дзен python

import this

Условные операторы

Способы проверки флагов

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')

Словари

Способ смержить словари (python 3.5+)

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

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

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

# Вариант для python2
>>> z = dict(x, **y)
>>> z
{'a': 1, 'c': 4, 'b': 3}

# В этом примере, 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)]

Использование метода get и его аргумента default

name_for_userid = {
    382: "Alice",
    590: "Bob",
    951: "Dilbert",
}

def greeting(userid):
    return "Hi %s!" % name_for_userid.get(userid, "there")

>>> greeting(382)
"Hi Alice!"

>>> greeting(333333)
"Hi there!"

Классы

Создаем класс легко при помощи типа namedtuple

>>> from collections import namedtuple
>>> Car = namedtuple('Car', 'color mileage')

# Класс работает как обычно
>>> my_car = Car('red', 3812.4)
>>> my_car.color
'red'
>>> my_car.mileage
3812.4

# Бонусом получаем строкое представление
>>> my_car
Car(color='red' , mileage=3812.4)

# Как и кортежи, именованные кортежи неизменяемы
>>> my_car.color = 'blue'
AttributeError: "can't set attribute"

Регулярки

Если парсить регуляркой с именованными группировками, то автоматически создаться словарь для соответствующих групп

import re

s = 'Interface: igb0  ---> mac: 01:02:03:af:ac:ad'

m = re.match(r"^Interface: (?P<interface>\S+).*mac: (?P<mac>\S+)", s)
m.groupdict()
>> {'interface': 'igb0', 'mac': '01:02:03:af:ac:ad'}

Модули и пути

Чтобы нормально импортировтаь модули, из вышестоящией директории

from pathlib import Path
from sys import path

path.insert(1, str(Path(__file__).parent.parent.absolute()))
import something # ../../something.py