Синтаксис Python: объект среза как объект или встроенный метод slice

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

Но когда надо получить элементы с 1 по 3, или четные, или каждый третий - то одними индексами не обойтись. Поэтому в Python есть понятие - СРЕЗы.

s = [1 ...
more ...

Синтаксис Python: __slots__

Python обладает широкими динамическими возможностями. Строгая динамическая неявная типизация позволяет не указывать типы, но при этом не бояться что в коде просуммируем строку и число. Однако за динамичность приходиться платить - памятью и скоростью.

Но что если хочется максимально уменьшить размер объектов (а в python все объекты) и при этом не потерять в функциональности? Для примера возьмем плоскость. На плоскости, пускай ...

more ...

Синтаксис Python: all и any

Коротко: all и any - встроенные методы, которые позволяют проверять все элементов списка на выполнение условия.

При валидации данных часто возникает задача проверить структуру на корректность. Например, пускай есть список словарей:

data = 
[
    {
        'title': "Super page",
        'description': "Super puper page",
        'id': 'page_super',
        'data': {}
    },
    {
        'title': "Super super page",
        'description': "Super puper page2",
        'id': 'page_super_super',
        'data': {}
    },
]

И надо проверить что во всех внутренних словарях ...

more ...

Синтаксис Python: type, isinstance - определяем тип переменной

С помощью функции type() можно проверить, принадлежит ли данное тому или иному типу:

>>> a = 10
>>> b = [1,2,3]
>>> type(a) == int
True
>>> type(b) == list
True
>>> type(a) == float
False

То же самое можно сделать с помощью функции isinstance():

>>> isinstance(a,int)
True
>>> isinstance(b,list)
True
>>> isinstance(b,tuple)
False
>>> c = (4,5,6)
>>> isinstance(c,tuple)
True ...
more ...

Синтаксис Python: менеджер контекста (with) - подборка интересных ссылок

Менеджеры контекста — это механизм стоящий за ключевым словом with.

Ключевое слово with появилось еще в Python 2.5 (через __future__). Такая конструкция пришла на смену концепту setup..try..except..finally

Если раньше писали

try:
    file = open('text.txt', 'r')
    file.read()
except ...

То сейчас

with open('text.txt', 'r') as fio:
    fio.read()

За этим изменением стоит много, но повторять ...

more ...

Синтаксис Python: strip, rstrip, lstrip

Не редко возникает задача убрать лишние пробелы с начала/конца строки. Например

a = 'Доброе утро, Иван'
message, name = a.split(',') 
print(name)
> ' Иван' # (лишний пробел сначала строки)

Что получить имя пользователя в чистом виде - хорошо бы убрать лишние символы (если они там есть). Лишними символами чаще всего являются - \r \n пробелы - и все это в большом количестве Для этого в ...

more ...

Синтаксис Python: *args, **kwargs

При написании кода не всегда хочется явно прописывать все аргументы. Например - на вход программы подается набор аргументов:

def run_program(config_folder, config_name, split_symbol, verbose=False):
    pass

Появляется новая опция - добавляй аргумент и явно указывай при вызове функции

run_program('/tmp', 'config_1.yaml', '#####', True)

Но в какой-то момент появляются опциональные аргументы. В этот момент приходит на помощь *args и **kwargs.

Примечание: символы , * применяются ...

more ...

Синтаксис Python: lambda-функции

Python поддерживает интересный синтаксис, позволяющий определять небольшие однострочные функции на лету. Позаимствованные из Lisp, так называемые lambda-функции могут быть использованы везде, где требуется функция.

Небольшой пример

def func(x, y):
    return x**2 + y**2

func = lambda x, y: x**2 + y**2

С одной стороны "прикольно", вместо 2 строк - одна, но сложные конструкции на lambda функциях не напишешь - плохо ...

more ...

Синтаксис Python: применение генераторов

Генераторы Python уже давно используются для решения всевозможных проблем связанных с итерациями и потоками данных. В этом уроке мы рассмотрим некоторые экзотические виды использования генераторов, таких как написание контекста менеджеры, функций обратного вызова (callbacks), устранение рекурсии, workers и много другого.

Внимание - видео очень длинное, но ЖЖУТКО интересное

more ...

Синтаксис Python: raw-unicode-escape против u'\xd0\x9a'

Python 2 и проблемы с кодировками — это единое целое. И мало, что сами файлы с исходниками сохраняют в самых разных кодировках, так и текстовые файлы с данными этим грешат. Казалось бы, используй encode/decode и что тут думать. Но бывает, что декодируешь юникод и получаешь строку:

u'\xd0\x9a\xd1\x83\xd1\x80\xd1\x83\xd0\xbc\xd0\xbe\xd1 ...
more ...