20 полезных советов и приемов Python, которые вы должны знать

  • 29 октября, 16:40
  • 1912
  • 0

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

Python используют многие известные компании: Google, Dropbox, Facebook, Mozilla, IBM, Quora, Amazon, Spotify, NASA, Netflix, Reddit и многие другие.

20 полезных советов и приемов Python, которые вы должны знать

Его синтаксис разработан с учетом простоты, читабельности и элегантности.

В этой статье представлены 20 полезных советов и приемов Python.

1. Zen of Python

Zen of Python, также известный как PEP 20, представляет собой небольшой текст Тима Питерса, который представляет руководящие принципы для разработки и использования Python. Его можно найти на веб-сайте Python, но вы также можете получить его в своем терминале (консоли) или блокноте Jupyter с помощью одного оператора:

>>> import this

The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

2. Цепное присваивание

Если вам нужно несколько переменных для ссылки на один и тот же объект, вы можете использовать цепное присваивание:

>>> x = y = z = 2
>>> x, y, z
(2, 2, 2)

Логично и элегантно, правда?

3. Сравнение по цепочке

Вы можете объединить несколько сравнений в одно выражение Python, объединяя операторы сравнения. Это выражение возвращает True, если все сравнения верны, или False в противном случае:

>>> x = 5
>>> 2 < x ≤ 8
True
>>> 6 < x ≤ 8
False

Это похоже на (2 <x) и (x ≤ 8) и (6 <x) и (x ≤ 8), но более компактно и требует, чтобы x оценивался только один раз.

>>> 2 < x > 4
True

Вы можете связать более двух сравнений:

>>> x = 2
>>> y = 8
>>> 0 < x < 4 < y < 16
True

4. Многократное назначение

Вы можете назначить несколько переменных в одном выражении, используя распаковку кортежей:

>>> x, y, z = 2, 4, 8
>>> x
2
>>> y
4
>>> z
8

Обратите внимание, что 2, 4, 8 в первом утверждении - это кортеж, эквивалентный (2, 4, 8).

5. Более расширенное множественное назначение

Обычные множественные назначения- это не все, что может сделать Python. Вам не нужно одинаковое количество элементов слева и справа:

>>> x, *y, z = 2, 4, 8, 16
>>> x
2
>>> y
[4, 8]
>>> z
16

В этом случае x принимает первое значение (2), потому что оно приходит первым. z является последним и принимает последнее значение (8). y принимает все другие значения, упакованные в список, потому что у него есть звездочка (* y).

6. Поменять местами переменные

Вы можете применить несколько назначений, чтобы поменять местами любые две переменные в сжатой манере, не вводя третью:

>>> x, y = 2, 8
>>> x
2
>>> y
8
>>> x, y = y, x
>>> x
8
>>> y 2

7. Слияние словарей

Один из способов объединить два или более словарей - распаковать их в новый файл:

>>> x = {'u': 1}
>>> y = {'v': 2}
>>> z = {**x, **y, 'w': 4}
>>> z
{'u': 1, 'v': 2, 'w': 4}

8. Соединение строк

Если вам нужно объединить несколько строк, в итоге между ними будет один и тот же символ или группа символов, вы можете использовать метод str.join ():

>>> x = ['u', 'v', 'w']
>>> y = '-*-'.join(x)
>>> y
'u-*-v-*-w'

9. Предварительная итерация

Если вы хотите перебрать последовательность и вам нужны как элементы последовательности, так и соответствующие индексы, вы должны использовать enumerate:

>>> for i, item in enumerate(['u', 'v', 'w']):
... print('index:', i, 'element:', item)
...
index: 0 element: u
index: 1 element: v
index: 2 element: w

В каждой итерации вы получите кортеж с индексом и соответствующим элементом последовательности.

10. Обратная итерация

Если вы хотите перебрать последовательность в обратном порядке, вы должны использовать  reversed :

>>> for item in reversed(['u', 'v', 'w']):
... print(item)
...
w
v
u

11. Совокупные элементы

Если вы собираетесь объединять элементы из нескольких последовательностей, вы должны использовать zip:

>>> x = [1, 2, 4]
>>> y = ('u', 'v', 'w')
>>> z = zip(x, y)
>>> z

>>> list(z)
[(1, 'u'), (2, 'v'), (4, 'w')]

Вы можете перебрать полученный zip-объект или преобразовать его в список или кортеж.

12. Транспонировка матрицы

Хотя люди обычно применяют NumPy (или аналогичные библиотеки) при работе с матрицами, вы можете получить транспонирование матрицы с помощью zip:

>>> x = [(1, 2, 4), ('u', 'v', 'w')]
>>> y = zip(*x)
>>> z = list(y)
>>> z
[(1, 'u'), (2, 'v'), (4, 'w')]

13. Уникальные значения

Вы можете удалить дубликаты из списка, который получает уникальные значения, преобразовав его в набор, если порядок элементов не важен:

>>> x = [1, 2, 1, 4, 8]
>>> y = set(x)
>>> y
{8, 1, 2, 4}
>>> z = list(y)
>>> z
[8, 1, 2, 4]

14. Сортировка последовательности

По умолчанию последовательности сортируются по первым элементам:

>>> x = (1, 'v')
>>> y = (4, 'u')
>>> z = (2, 'w')
>>> sorted([x, y, z])
[(1, 'v'), (2, 'w'), (4, 'u')]

Однако, если вы хотите отсортировать их по вторым (или другим) элементам, вы можете использовать ключ параметра и соответствующую лямбда-функцию в качестве соответствующего аргумента:

>>> sorted([x, y, z], key=lambda item: item[1])
[(4, 'u'), (1, 'v'), (2, 'w')]

Это похоже, если вы хотите получить обратный заказ:

>>> sorted([x, y, z], key=lambda item: item[1], reverse=True)
[(2, 'w'), (1, 'v'), (4, 'u')]

15. Сортировка словарей

Вы можете использовать аналогичный подход для сортировки кортежей ключ-значения словарей, полученных с помощью метода .items ():

>>> x = {'u': 4, 'w': 2, 'v': 1}
>>> sorted(x.items())
[('u', 4), ('v', 1), ('w', 2)]

Они отсортированы по ключам. Если вы хотите, чтобы они были отсортированы в соответствии с их значениями, вы должны указать обратные аргументы, которые соответствуют ключу:

>>> sorted(x.items(), key=lambda item: item[1])
[('v', 1), ('w', 2), ('u', 4)]
>>> sorted(x.items(), key=lambda item: item[1], reverse=True)
[('u', 4), ('w', 2), ('v', 1)]

16. Неформатированные f-строки

PEP 498 и Python 3.6 представили так называемые отформатированные строки или f-строки. Вы можете вставлять выражения в такие строки. Можно и просто считать строку как необработанной, так и отформатированной. 

>>> fr'u \ n v w={2 + 8}'
'u \\ n v w=10'

17. Получение текущей даты и времени

Python имеет встроенный модуль datetime, который универсален в работе с датами и временем. Один из его методов, .now (), возвращает текущую дату и время:

>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2019, 5, 20, 1, 12, 31, 230217)

18. Получение индекса максимального (или минимального) элемента

Python не предоставляет процедуры для непосредственного получения индекса максимального или минимального элемента в списке или кортеже. К счастью, есть (по крайней мере) два способа сделать это:

>>> x = [2, 1, 4, 16, 8]
>>> max((item, i) for i, item in enumerate(x))[1]
3

Если есть два или более элементов с максимальным значением, этот подход возвращает индекс последнего:

>>> y = [2, 1, 4, 8, 8]
>>> max((item, i) for i, item in enumerate(y))[1]
4

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

>>> -max((item, -i) for i, item in enumerate(y))[1]
3

Альтернативный способ, вероятно, более элегантный:

>>> x = [2, 1, 4, 16, 8]
>>> max(range(len(x)), key=lambda i: x[i])
3
>>> y = [2, 1, 4, 8, 8]
>>> max(range(len(y)), key=lambda i: x[i])
3

Чтобы найти индекс минимального элемента, используйте функцию min вместо max.

19. Получение декартового произведения

Встроенный модуль itertools предоставляет множество потенциально полезных классов. Одним из них является продукт, используемый для получения декартового произведения:

>>> import itertools
>>> x, y, z = (2, 8), ['u', 'v', 'w'], {True, False}
>>> list(itertools.product(x, y, z))
[(2, 'u', False), (2, 'u', True), (2, 'v', False), (2, 'v', True),
(2, 'w', False), (2, 'w', True), (8, 'u', False), (8, 'u', True),
(8, 'v', False), (8, 'v', True), (8, 'w', False), (8, 'w', True)]

20. Оператор для умножения матриц

PEP 465 и Python 3.5 представили специальный инфиксный оператор для умножения матриц @. Вы можете реализовать это для своего класса с помощью методов matmul , rmatmul и imatmul . Вот как выглядит код для умножения векторов или матриц:

>>> import numpy as np
>>> x, y = np.array([1, 3, 5]), np.array([2, 4, 6])
>>> z = x @ y
>>> z
44


0 комментариев
Сортировка:
Добавить комментарий

IT Новости

Смотреть все