Comments 27
«Не рассказывает»? А документация им это тоже не рассказывает?
Определённо, это статья для тех, кто хочет всё знать, но не хочет ничего читать, смотреть или слушать. Тут, однако, парадокс: статью же ещё прочитать надо
Вы бы ещё книгу (большая толстая газета) посоветовали бы!
Если статья оказалась интересной, то документация будет как увлекательное детективное чтиво.
7-я хитрость на Python: представление больших чисел в удобочитаемом виде
a=663_456_987
print(type(a))
<class 'int'>
print(a)
663456987
Возможно, ниже еще десяток "хитростей в python" подвезут.
a = [1, 2, 3]
b = [4, 5, 6]
ab = zip(a, b) # [(1, 4), (2, 5), (3, 6)]
a1, b1 = zip(*ab) # (1, 2, 3), (4, 5, 6)
a2, b2 = zip(*ab) # в Python 2 работало, в Python 3 ошибка
(тут еще следует помнить, что в третьем Питоне zip выдает не список, а генератор, и после произведенной над ним операции zip(*ab) он будет пустым, т. е., например, повторить операцию над тем же объектом не получится)
даладно.жпг
Назначение результатов работы оператора распаковки переменным
Возможно, после того, как вы узнали о возможностях оператора распаковки, вы захотите пользоваться им для записи данных в переменные. Посмотрим на то, как это сделать:
string = «Let's learn Python»
# Мы собираемся сохранить результат распаковки строки в var1
var1 = [*string]
print(var1)
# ['L', 'e', 't', "'", 's', ' ', 'l', 'e', 'a', 'r', 'n', ' ', 'P', 'y', 't', 'h', 'o', 'n']
Возможно, вам покажется непонятной конструкция [*iterable]. Поэтому давайте с ней разберёмся.
Рубрика «Вредные советы». Если вдруг Вам по какой-либо причине захочется воспользоваться оператором * для создания итерируемого объекта другого типа на основе существующего, то нужно просто воспользоваться конструктором нужного типа:
var1 = list(string)
Вместо какой-то нечитаемой конструкции, проблему которой сам же автор признает:
«Возможно, вам покажется непонятной конструкция [*iterable].»
Конечно же не понятно, что сделать-то хотели? Конвертировать строку в список? Ну так и пишите! Вместо list может быть tuple, deque, set или другие коллекции, поддерживающие инициализацию из итерируемого объекта.
… завоёвывает сердца… простотой синтаксиса.
Вот сейчас смешно было.
Функцией breakpoint() можно пользоваться в Python 3.6+. Она инициирует запуск сессии pdb.set_trace().
Вот за это спасибо. Для использования ipdb нужно прописать
export PYTHONBREAKPOINT=ipdb.set_trace
var3 = (*another_str,)
Это плохочитаемый код, лучше явно:
var3 = tuple(another_str)
Set, под капотом, использует хеш-таблицы, т. е.
x = {1, 2, 3}
3 in x
будет выполняться за O(1), в отличие от
x = [1, 2, 3]
3 in x
которое будет выполняться за O(n)
Вот функция, которая удаляет из списка дубликаты элементов и возвращает отсортированный список:
sorted(set(lst))
А не тот императивный код с созданием списка в отдельную переменную.
Функция dir() возвращает список атрибутов и методов класса.
А функция help() возвращает документацию по атрибутам и методам. Удивительное рядом!
ценность подобных статей в том, что они порой порождают в комментариях более ценные дискуссии и советы ;)
В книгах по Питону это всё написано, если их, конечно, читать, что и должны делать новички. Кроме места про отладчик, которое нафиг не нужно.
Если попытаться передать функции
random.choice(seq)
неиндексируемую последовательность, например — словарь, множество или значение числового типа — возникнет ошибка.
Ошибкой было назвать словарь неиндексируемой последовательностью. Да возникнет она не у только лишь всех )
from random import choice
d = {i: i * i for i in range(10)}
print(choice(d)) # всё пучком
Внтури квадратных скобок можно использовать многоточие, оно станет объектом Ellipsis. Можно использовать для конструкций вида:
LazyList[1, ...]
if not len(seq) > index
Гораздо лаконичнее написать
if len(seq) < index
не? Да и в целом не будет ошибки, если конечный индекс превысит длину строки. Например:
>>> "aaa"[:100]
'aaa'
6 хитростей Python, о которых никто не рассказывает новичкам