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

Вы называете себя программистом Python, но, вероятно, не знаете забавного общедоступного секрета языка программирования.

Сделайте себе одолжение и начните с этого. Откройте свой любимый терминал, запустите интерпретатор Python и введите следующее: import this .

После нажатия Enter вас встретит следующее красноречивое стихотворение.

«Дзен Питона», Тим Питерс

Красивое лучше, чем уродливое.
Явное лучше, чем неявное.
Простое лучше, чем сложное.
Сложное лучше, чем сложное.
Плоское лучше, чем вложенное.
Разреженность лучше, чем плотность.
Удобочитаемость имеет значение.
Особые случаи не настолько особенные, чтобы нарушать правила.
Хотя практичность важнее чистоты.
Ошибки никогда не должны оставаться незамеченными.
Если явно не замалчивается.
Перед лицом двусмысленности откажитесь от искушения угадать.
Должен быть один — и желательно только один — очевидный способ сделать это.
Хотя этот способ может поначалу это может быть не очевидно, если только вы не голландец.
Лучше сейчас, чем никогда.
Хотя никогда лучше, чем *прямо* сейчас.
Если реализацию трудно объяснить, это Плохая идея.
Если реализацию легко объяснить, это может быть хорошей идеей.
Пространства имен — одна из замечательных идей — давайте сделаем больше таких!»

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

Несмотря на растущую популярность Python, большинство новых приверженцев этого языка, как правило, демонстрируют один и тот же стандартный набор навыков: создание циклов, определение функций, создание объектов — вы знаете, обычный набор (каламбур) основ программирования. Некоторые люди могут даже использовать понимание списка здесь и там.

Хотя эти навыки, несомненно, важны, ограничивать себя ими — вопиющая ошибка. Почему? Он не использует важный факт: простота Python позволяет программистам решать невероятные задачи с помощью довольно простого кода, создавая в конечном итоге инструменты и программы, которые потребовали бы гораздо больше головной боли на других языках.

Для достижения этой цели вот три навыка Python, которые вы могли бы изучить.

Графическая библиотека Python для черепах

Библиотека Python Turtle, вероятно, является одним из самых недооцененных и малоиспользуемых графических модулей во всем языке. Люди одержимы более продвинутыми инструментами, такими как PyGame и Tkinter, у которых гораздо более крутые кривые обучения. В отличие от этого, Turtle достаточно прост, поэтому многие вводные курсы программирования используют его для знакомства с Python для людей, которые никогда раньше не программировали.

По своей сути Черепаха очень проста. У вас просто есть мышь («черепаха»), и вы даете ей основные команды, приказывая ей двигаться в том направлении, в котором вы хотите нарисовать определенную фигуру. Продвигаясь дальше по рисунку, вы можете подчеркивать границы и заполнять фигуры цветами, как в программных системах более высокого уровня, таких как Adobe Illustrator.

В конце концов, это все, что представляет собой Черепаха: использование кода для рисования и раскрашивания.

Чтобы проиллюстрировать его простоту, вот фрагмент кода, который рисует квадрат:

import turtle as t
t.forward(100)
t.right(90)
t.forward(100)
t.right(90)
t.forward(100)
t.right(90)
t.forward(100)
t.right(90)
t.done()

Или, более сжато:

import turtle as t
for _ in range(4):
    t.forward(100)
    t.right(90)
t.done()

Вот краткое описание кода:

  • Команда forward указывает объекту Turtle переместиться на 100 пикселей вперед.
  • Команда right указывает объекту Turtle повернуться на 90 градусов вправо.
  • Команда done сообщает Python, что мы закончили рисовать, что предотвращает автоматическое закрытие всплывающего окна, содержащего рисунок.

Даже на этом кратком примере мы уже можем видеть, как можно расширить базовые строительные блоки Turtle для создания более сложных программ. Например, квадрат не так уж далек от своего рода «доски», полезной для программирования известных игр, таких как Connect-4 или 2048. Просто посчитайте немного и нарисуйте несколько линий, и вы уже в пути.

Соответственно, одним из больших преимуществ Turtle является то, что он позволяет вам программировать приятные, красивые игры и графику, имея только начальные знания. Другими словами, вам не нужно быть экспертом по JavaScript, чтобы поразить людей своими изобретениями. На первом уроке программирования, который я когда-либо посещал, студенты использовали Turtle для создания увлекательных игр всего через несколько недель после того, как они впервые увидели Python.

Если вы готовы приложить немного усилий, вы тоже можете.

Визуализация в Альтаире

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

Одним из наименее сложных, но наиболее эффективных способов сделать это является визуализация. В языке программирования Python два наиболее часто используемых модуля визуализации — это Matplotlib и Seaborn.

Для этого есть веская причина: эти два модуля просты по синтаксису, и поэтому их легко освоить. Это делает их идеальными инструментами для задач быстрой визуализации, предназначенных для базового исследовательского анализа данных. Например, создать линейную диаграмму в Seaborn очень просто:

import matplotlib.pyplot as plt
import seaborn as sns
sns.lineplot([1, 2, 3, 4], [1, 2, 3, 4])
plt.xlabel('X-Axis')
plt.ylabel('Y-Axis')
plt.title('An Exciting Line Chart')

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

Войдите в Альтаир. Построенный на основе известной библиотеки визуализации JavaScript Vega-Lite, Altair предоставляет возможность генерировать широкий спектр красивых визуализаций в коде Python [1]. Кривая обучения, по общему признанию, является шагом вперед по сравнению с Matplotlib, но все же намного проще, чем изучение JavaScript.

Altair предоставляет декларативную грамматику — хотя код может становиться все более запутанным с более сложными визуализациями, преимущество состоит в том, что его всегда можно разбить на одни и те же строительные блоки. Например, вот как вы могли бы создать линейный график сверху:

import pandas as pd
import altair as alt
source = pd.DataFrame({'X': [0, 1, 2, 3, 4], 'Y': [0, 1, 2, 3, 4]})
alt.Chart(source).mark_line().encode(
    x=alt.X('X', scale=alt.Scale(domain=[0, 4]), title='X-Axis'),
    y=alt.Y('Y', scale=alt.Scale(domain=[0, 4]), title='Y-Axis')
).properties(
    title='An Exciting Line Chart'
)

Сила Altair (то есть выразительность) заключается в огромном количестве настраиваемых параметров, с которыми пользователи могут возиться; то, что я показал выше, является лишь крошечным подмножеством.

Я лично много раз использовал Altair на протяжении многих лет для разработки и программирования новых визуализаций, которые я представлял в своей голове. Хотя, конечно, все еще есть ограничения, это огромный шаг вперед по сравнению с Matplotlib и Seaborn. Кроме того, если вы когда-нибудь запутаетесь, сообщество Altair невероятно отзывчиво и готово помочь.

Так что в следующий раз, когда вам понадобится закодировать линейную диаграмму, возможно, попробуйте Altair.

Причудливые структуры управления и данных

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

Цикл For-Else

Python, в отличие от большинства языков, позволяет вам использовать условное ключевое слово else в сочетании с циклом for. Используя этот специальный синтаксис, вы напишете обычный цикл, за которым следует оператор else. Python использует следующее правило выполнения: оператор else выполняется тогда и только тогда, когда цикл не прерывается оператором break.

Это легче увидеть на примере:

# No break, so we enter else statement
>>> for element in ['a', 'b', 'c']:
...     if element == 'x':
...             break
... else:
...     print("THERE WAS NO BREAK")
...
THERE WAS NO BREAK
# Break, so we do not enter else statement
>>> for element in ['a', 'x', 'b', 'c']:
...     if element == 'x':
...             break
... else:
...     print("THERE WAS NO BREAK")
...
>>>

Поскольку первый фрагмент кода никогда не выходит из цикла for, Python знает, что нужно вводить условное выражение else; точно так же он знает, что не следует делать этого во втором случае.

Цикл for-else — довольно специфический вариант использования, но он может быть полезен в следующий раз, когда вы захотите выполнить какое-либо действие, определяемое тем, все ли элементы итерируемого объекта удовлетворяют определенному условию.

Понимание словаря

Большинство программистов Python слышали о списковом включении [2]; здесь я хотел бы обсудить их менее известного родственника — понимание словаря.

Словари [3], несомненно, являются одной из самых полезных функций Python, но временами их определение может вызывать некоторые затруднения. Введите понимание словаря.

Например, предположим, что у вас есть список имен, и вы хотите создать словарь, в котором ключи — это сами имена, а значения — это длины имен. Вот как вы можете сделать это традиционно:

>>> names = ['Alice', 'Bo', 'Malika']
>>> traditional_dict = dict()
>>> for name in names:
...     traditional_dict[name] = len(name)
...
>>> traditional_dict
{'Alice': 5, 'Bo': 2, 'Malika': 6}

Словарные включения упрощают код:

>>> names = ['Alice', 'Bo', 'Malika']
>>> comprehension_dict = {name: len(name) for name in names}
>>> comprehension_dict
{'Alice': 5, 'Bo': 2, 'Malika': 6}

Гораздо чище.

Словарное включение работает так же, как списочное включение, эффективно устраняя циклы for в простых случаях использования.

Python разработан, чтобы быть простым и лаконичным, и, соответственно, он содержит ряд структур данных и управления, предназначенных для достижения этой цели. Цикл for-else и понимание словаря — лишь два из моих личных фаворитов.

Я предлагаю вам немного покопаться, чтобы найти свой собственный.

Резюме и заключительные мысли

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

Вот шпаргалка для дальнейшего использования:

  1. Игры и рисунки — это не просто развлечение, это востребованный продукт. Потратьте некоторое время на изучение Turtle.
  2. Визуализация данных — ценный навык. Добейтесь успеха с Altair.
  3. Не ограничивайте себя основами. Осваивайте новые структуры данных и управления.

Удачи в ваших приключениях на Python.

Хотите преуспеть в Python? Получите эксклюзивный бесплатный доступ к моим простым и понятным руководствам здесь. Хотите читать неограниченное количество историй на Medium? Зарегистрируйтесь по моей реферальной ссылке ниже!



Меня зовут Муртаза Али, я аспирант Вашингтонского университета, изучаю взаимодействие человека и компьютера. Мне нравится писать об образовании, программировании, жизни и случайных размышлениях.

Рекомендации

[1] https://altair-viz.github.io/gallery/index.html
[2] https://towardsdatascience.com/whats-in-a-list-comprehension-c5d36b62f5
[3] https://towardsdatascience.com/whats-in-a-dictionary-87f9b139cc03