Книга: Простой Python. Современный стиль программирования. 2-е изд.
Назад: Часть I. Основы Python
Дальше: Глава 2. Данные: типы, значения, переменные и имена

Глава 1. Python: с чем его едят

Популярными становятся только уродливые языки. Python — исключение из этого правила.

Дональд Кнут

Тайны

Начнем с двух небольших тайн и их разгадок. Что, по-вашему, означают следующие две строки?

(Ряд 1): (RS) K18, ssk, k1, turn work.

(Ряд 2): (WS) Sl 1 pwise, p5, p2tog, p1, turn.

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

01_01.tif 

Рис. 1.1. Вязаные носки

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

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

  1/2 столовой ложки масла или маргарина;

  1/2 столовой ложки сливок;

  2 1/2 стакана муки;

  1 чайная ложка соли;

  1 чайная ложка сахара;

  4 стакана картофельного пюре (охлажденного).

 

Перед тем как добавить муку, убедитесь, что все ингредиенты охлаждены.

Смешайте все ингредиенты.

Тщательно замесите.

Сделайте 20 шариков.

Держите их охлажденными до следующего этапа.

Для каждого шарика:

  присыпьте разделочную доску мукой;

  раскатайте шарик при помощи рифленой скалки;

  жарьте на сковороде до подрумянивания;

  переверните и обжарьте другую сторону.

Даже если вы не готовите, вы сможете распознать кулинарный рецепт: список продуктов, за которым следуют указания по приготовлению. Но что получится в итоге? Это лефсе, норвежский деликатес, который напоминает тортилью (рис. 1.2). Полейте блюдо маслом, вареньем или чем-либо еще, сверните и наслаждайтесь.

01_02.tif 

Рис. 1.2. Лефсе

Схема для вязания и рецепт имеют несколько схожих моментов:

фиксированный словарь, состоящий из слов, аббревиатур и символов: какие-то могут быть вам знакомы, какие-то — нет;

• правила, описывающие, что и где можно говорить, — синтаксис;

• последовательность операций, которые должны быть выполнены в определенном порядке;

• в некоторых случаях — повторение определенных операций (цикл), например способ приготовления каждого кусочка лефсе;

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

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

• кое-какие данные, которые нужно использовать, создать или изменить, — картофель и нитки;

• инструменты, которые используются для работы с данными, — горшки, миксеры, духовки, вязальные спицы;

ожидаемый результат. В наших примерах результатом будет предмет для ног и предмет для желудка. Главное — не перепутать.

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

Маленькие программы

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

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

Пришло время обратиться к настоящей программе (пример 1.1). Как вы думаете, что она делает?

Пример 1.1. countdown.py

for countdown in 5, 4, 3, 2, 1, "hey!":

    print(countdown)

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

5

4

3

2

1

hey!

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

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

Пример 1.2 — тоже небольшая программа на Python: она позволяет выбрать одно из заклинаний Гарри Поттера, хранящееся в списке, и вывести его на экран.

Пример 1.2. spells.py

spells = [

    "Riddikulus!",

    "Wingardium Leviosa!",

    "Avada Kedavra!",

    "Expecto Patronum!",

    "Nox!",

    "Lumos!",

    ]

print(spells[3])

Отдельные заклинания являются в Python строками (последовательностями текстовых символов, заключенных в кавычки). Они разделены запятыми и помещены в список — это можно определить по квадратным скобкам ([ и ]). Слово spells — это переменная, являющаяся именем списка, — с ее помощью мы можем работать со списком. В нашем случае на экран будет выведено четвертое заклинание:

Expecto Patronum!

Почему мы сказали 3, если нам нужно было четвертое заклинание? Списки Python, такие как spells, представляют собой последовательность значений, доступ к которым осуществляется с использованием смещения от начала списка. Смещение для первого элемента списка равно 0, а для четвертого — 3.

108751.png

Люди обычно считают с единицы, поэтому считать с нуля может показаться странным. Однако в программировании удобнее оперировать смещениями, а не позициями. Да, это пример того, как компьютерная программа иногда отличается от обычного языка.

Список — очень распространенная структура данных в языке программирования Python. О том, как им пользоваться, будет рассказано в главе 7.

Программа из примера 1.3 выводит на экран цитату одного из участников комедийного трио The Three Stooges («Три балбеса»), однако на выбор фразы влияет не позиция в списке, а то, кто ее сказал.

Пример 1.3. quotes.py

quotes = {

    "Moe": "A wise guy, huh?",

    "Larry": "Ow!",

    "Curly": "Nyuk nyuk!",

    }

stooge = "Curly"

print(stooge, "says:", quotes[stooge])

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

Curly says: Nyuk nyuk!

quotes — переменная, которая именует словарь Python: коллекцию уникальных ключей (в примере ключом является имя участника трио) и связанных с ними значений (в нашем примере — значимое высказывание участника «Балбесов»). Используя словарь, вы можете сохранять элементы и выполнять их поиск по именам: зачастую это удобнее, чем работать со списком.

В примере с заклинаниями для создания списка использовались квадратные скобки ([ и ]), а в примере с цитатами для создания словаря — фигурные скобки ({ и }). Также мы использовали двоеточие (:) для того, чтобы связать каждый ключ словаря с соответствующим значением. Более подробно о словарях можно прочитать в главе 8.

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

Более объемная программа

Теперь рассмотрим что-то совершенно иное: в примере 1.4 представлена программа, которая выполняет более сложную серию задач. Не рассчитывайте, что сразу поймете, как она работает, — книга для того и предназначена, чтоб научить вас этому! Таким образом я даю вам возможность увидеть и прочувствовать типичную полноразмерную программу, написанную на языке Python. Если вы знаете другие языки программирования, то можете сравнить их с Python прямо сейчас. Сможете ли вы, не зная Python и еще не прочтя расшифровку, примерно представить, что делает каждая строка? Вы уже видели примеры использования списка и словаря, а эта программа демонстрирует еще несколько новых возможностей.

В первом издании книги программа из примера подключалась к сайту YouTube и получала информацию о самых популярных роликах, таких как Charlie Bit My Finger. Она хорошо работала до того момента, как компания Google отключила поддержку этой службы. Во втором издании уже в новом примере (пример 1.4) мы подключаемся к другому сайту, который, очевидно, просуществует гораздо дольше, — Wayback Machine из Internet Archive (/) (бесплатного сервиса, сохраняющего миллиарды веб-страниц, в том числе фильмы, телешоу, музыкальные композиции, игры и иные цифровые артефакты за последние 20 лет). Еще несколько примеров таких веб-API вы увидите в главе 18.

Программа попросит вас ввести URL и дату. Затем она спросит у Wayback Machine, имеется ли копия этого веб-сайта за указанную дату. Если копия есть, API вернет информацию о ней программе, которая, в свою очередь, выведет URL и отобразит его в веб-браузере. Суть заключается в том, чтобы увидеть, как Python справляется с разнообразными задачами — принимает пользовательские данные, общается с веб-сайтами в Интернете и получает от них данные, извлекает оттуда URL и убеждает веб-браузер отобразить этот URL.

Если бы мы получали обычную веб-страницу, заполненную текстом, отформатированным как HTML, нам пришлось бы сначала придумать, как отобразить ее, а потом выполнить много действий — все это можно радостно перепоручить веб-браузеру. Мы также можем попробовать извлечь именно те данные, которые нам нужны (более подробно о веб-скрапинге читайте в главе 18). Любой из выбранных вариантов потребует выполнения большего количества работы и увеличит программу. Вместо этого Wayback Machine возвращает данные в формате JSON. JSON, или JavaScript Object Notation, — это читабельный для человека текстовый формат, который описывает типы и значения, а также выстраивает данные в определенном порядке. Он немного похож на языки программирования и уже стал популярным способом обмена данными между разными языками программирования и системами. Подробнее о JSON вы узнаете в главе 12.

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

Пример 1.4. archive.py

1 import webbrowser

2 import json

3 from urllib.request import urlopen

4

5 print("Let's find an old website.")

6 site = input("Type a website URL: ")

7 era = input("Type a year, month, and day, like 20150613: ")

8 url = "" % (site, era)

9 response = urlopen(url)

10 contents = response.read()

11 text = contents.decode("utf-8")

12 data = json.loads(text)

13 try:

14     old_site = data["archived_snapshots"]["closest"]["url"]

15     print("Found this copy: ", old_site)

16     print("It should appear in your browser now.")

17     webbrowser.open(old_site)

18 except:

19     print("Sorry, no luck finding", site)

Такая небольшая программа, написанная на языке Python, делает многое с помощью всего нескольких строк. Не все термины вы уже знаете, однако сможете познакомиться с ними в следующих главах.

1. Импортируем (делаем доступным для этой программы) весь код из модуля стандартной библиотеки, который называется webbrowser.

2. Импортируем весь код из модуля стандартной библиотеки, который называется json.

3. Импортируем только функциюurlopen из модуля стандартной библиотеки urllib.request.

4. Пустая строка (мы не хотим перегрузить восприятие).

5. Выводим на экран приветственный текст.

6. Выводим на экран вопрос об URL, считываем пользовательский ввод и сохраняем это в переменной с именем site.

7. Выводим на экран еще один вопрос и на этот раз считываем год, месяц и день, а затем сохраняем их в переменной с именем era.

8. Создаем строковую переменную с именем url, чтобы сайт Wayback Machine искал копию требуемого сайта по дате.

9. Соединяемся с сервером, расположенным по этому адресу, и запрашиваем определенный веб-сервис.

10. Получаем ответ и присваиваем его переменной contents.

11. Дешифруем содержимое переменной contents в текстовую строку формата JSON и приписываем ее переменной text.

12. Преобразуем переменную text в data — структуру данных языка Python, предназначенную для работы с видео.

13. Проверяем на ошибки: помещаем следующие четыре строки в блок try и, если находим ошибку, запускаем последнюю строку программы (она идет после ключевого слова except).

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

15. Выводим на экран полученный URL.

16. Сообщаем о том, что случится, когда выполнится следующая строка.

17. Отображаем полученный URL в браузере.

18. Если во время выполнения предыдущих строк что-то пошло не так, Python перейдет сюда.

19. Если программа дала сбой, выводим сообщение и имя сайта, который мы искали. Эта строка также имеет отступ, поскольку должна выполняться только в том случае, если выполняется строка except.

Когда я сам запустил эту программу в окне терминала, то ввел URL сайта и дату и получил следующий результат:

$ python archive.py

Let's find an old website.

Type a website URL: lolcats.com

Type a year, month, and day, like 20150613: 20151022

Found this copy: /

It should appear in your browser now.

На рис. 1.3 показано то, что появилось в моем браузере.

01_03.tif 

Рис. 1.3. Результат обращения к Wayback Machine

В предыдущем примере мы задействовали стандартные библиотечные модули (программы, включаемые в Python при установке), но совсем не обязательно ограничиваться только ими: на языке Python написано много отличного стороннего ПО. В примере 1.5 показывается та же программа, получающая доступ к архиву Интернета (Internet Archive), но в ней использован внешний пакет ПО для Python, который называется requests.

Пример 1.5. archive2.py

1 import webbrowser

2 import requests

3

4 print("Let's find an old website.")

5 site = input("Type a website URL: ")

6 era = input("Type a year, month, and day, like 20150613: ")

7 url = "" % (site, era)

8 response = requests.get(url)

9 data = response.json()

10 try:

11     old_site = data["archived_snapshots"]["closest"]["url"]

12     print("Found this copy: ", old_site)

13     print("It should appear in your browser now.")

14     webbrowser.open(old_site)

15 except:

16     print("Sorry, no luck finding", site)

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

Python в реальном мире

Стоит ли тратить время и силы на изучение Python? Язык программирования Python существует примерно с 1991 года (он старше Java, но моложе С) и является одним из пяти самых популярных языков программирования. Людям платят деньги за написание программ на Python — очень важных и значимых, которыми мы пользуемся каждый день: Google, YouTube, Instagram, Netflix и Hulu.

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

Python используется во многих компьютерных приложениях, таких как:

командная строка на мониторе или в окне терминала;

• пользовательские интерфейсы (Graphical User Interface, GUI), включая сетевые;

• веб-приложения, как клиентские, так и серверные;

• бэкенд-серверы, поддерживающие крупные популярные сайты;

• облака (серверы, управляемые сторонними организациями);

• приложения для мобильных устройств;

приложения для встроенных устройств.

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

В опросе The 2018 Python Developers’ Survey (/) вы можете увидеть числа и графики, показывающие текущее место языка Python в мире вычислительных машин.

Мы рассмотрим применение Python для создания сайтов, системного администрирования и манипулирования данными. Рассмотрим также использование Python в искусстве, науке и бизнесе.

Python против языка с планеты Х

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

Каждая программа должна напечатать число и немного рассказать о языке, на котором она написана.

Если вы пользуетесь терминалом или терминальным окном, программа, которая читает то, что вы вводите, выполняет это и отображает результат, называется программой-оболочкой. Оболочка операционной системы Windows называется cmd (), она выполняет пакетные файлы, имеющие расширение .bat. Для Linux и других операционных систем семейства Unix (включая macOS) существует множество программ-оболочек. Самая популярная из них называется bash (/) или sh. Оболочка обладает простейшими возможностями вроде выполнения простой логики и разворачивания символа-джокера наподобие * в полноценные имена файлов. Вы можете сохранять команды в файлы, которые называются сценариями оболочки, и выполнять их позже. Подобные программы могли быть в числе самых первых в вашей карьере программиста. Проблема в том, что возможности для масштабирования у сценариев оболочки ограничиваются несколькими сотнями строк, а сами сценарии выполняются гораздо медленнее, чем программы, написанные на других языках. В следующем фрагменте кода демонстрируется небольшая программа-оболочка:

#!/bin/sh

language=0

echo "Language $language: I am the shell. So there."

Если вы сохраните этот файл под именем test.sh и запустите его с помощью команды shtest.sh, то на экране увидите следующее:

Language 0: I am the shell. So there.

Старые добрые С ()) и С++ (++) являются довольно низкоуровневыми языками программирования, которыми пользуются в том случае, когда важна скорость. Ваша операционная система и множество других программ (включая программу python на вашем компьютере), скорее всего, написаны на C и C++.

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

#include <stdio.h>

int main(int argc, char *argv[]) {

    int language = 1;

    printf("Language %d: I am C! See? Si!\n", language);

    return 0;

}

С++ происходит из одного семейства с С, но имеет несколько отличительных особенностей:

#include <iostream>

using namespace std;

int main() {

    int language = 2;

    cout << "Language " << language << \

        ": I am C++!  Pay no attention my little brother!" << \

        endl;

    return(0);

}

Java (/) и C# (/) являются преемниками языков С и С++. Они избавлены от некоторых недостатков предшественников (особенно в управлении памятью), но при этом могут быть немного избыточными. Следующий пример написан на Java:

public class Anecdote {

    public static void main (String[] args) {

        int language = 3;

        System.out.format("Language %d: I am Java! So there!\n", language);

    }

}

Если вы никогда не писали ни на одном из этих языков, у вас может возникнуть вопрос, что все это такое? Ведь мы хотели всего лишь вывести на экран простую строку — действительно, некоторые языки нагружены значительным синтаксическим багажом. Подробнее об этом вы узнаете из главы 2.

С, С++ и Java являются примерами статических языков. Они требуют, чтобы вы указали компьютеру некоторые низкоуровневые детали, например типы данных. В приложении А говорится, что для разных типов данных выделяется разное количество памяти и для них можно выполнять лишь заранее определенный набор операций. Динамические языки (они также называются скриптовыми) — полная противоположность статическим, они не заставляют вас определять тип переменной перед тем, как ее использовать.

Многоцелевым динамическим языком многие годы был Perl (/), очень мощный и с обширными библиотеками. Однако его синтаксис достаточно труден для понимания, а сам язык теряет в популярности из-за появления языков программирования Python и Ruby. Следующий пример побалует вас острым привкусом Perl:

my $language = 4;

print "Language $language: I am Perl, the camel of languages.\n";

Язык программирования Ruby (/) появился немного позже. Он отчасти позаимствовал функционал у языка Perl, а свою популярность приобрел благодаря фреймворку для веб-разработки Ruby on Rails. Используется Ruby примерно в тех же областях, что и Python, и, выбирая между этими языками, вам придется руководствоваться в большей степени вкусом и доступностью библио­тек. Следующий фрагмент кода написан на Ruby:

language = 5

puts "Language #{language}: I am Ruby, ready and aglow."

Язык программирования PHP (/) из следующего примера очень популярен в области веб-разработок, поскольку позволяет довольно легко объединять HTML и код. Однако язык PHP имеет несколько подводных камней, и с ним довольно трудно работать за пределами сферы веб-разработок. Вот так выглядит программа, написанная на PHP:

<?PHP

$language = 6;

echo "Language $language: I am PHP, a language and palindrome.\n";

?>

Язык Go (/) (в поисковике лучше искать Golang) появился относительно недавно и пытается быть эффективным и быстрым:

package main

 

import "fmt"

 

func main() {

  language := 7

  fmt.Printf("Language %d: Hey, ho, let's Go!\n", language)

}

Еще одной современной альтернативой языкам С и С++ является Rust ():

fn main() {

    println!("Language {}: Rust here!", 8)

Кто остался? Ах да, Python (/):

language = 9

print(f"Language {language}: I am Python. What's for supper?")

Почему же Python?

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

Python — это наиболее быстро набирающий популярность основной язык программирования, как показано на рис. 1.4 (/);

• редакторы TIOBE Index (/) в июне 2019 года заявили: «В этом месяце Python снова достиг высочайшей позиции в TIOBE Index, его результат составил 8,5 %. Если Python удержит такой темп, то в течение ближайших трех-четырех лет он сможет заменить С и Java, став самым популярным языком программирования в мире»;

• Python стал языком программирования 2018 года по версии TIOBE и занял первые места в рейтингах IEEE Spectrum () и PyPL ();

• Python является самым популярным языком программирования для курсов введения в информатику в лучших американских колледжах ();

Python официально используется для обучения во французских гимназиях.

119384.png 

Рис. 1.4. Python опережает в росте остальные основные языки программирования

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

Но почему Python так популярен? Ведь языки программирования не имеют харизмы. В чем же причина?

Python — многоцелевой высокоуровневый язык программирования. Его дизайн позволяет писать хорошо читаемый код, что на самом деле гораздо важнее, чем кажется на первый взгляд. Каждая компьютерная программа пишется всего однажды, но впоследствии к ней обращаются множество раз. Благодаря удобочитаемости программу легко запомнить, а также легко ее воспроизвести. По сравне­нию с другими популярными языками программирования кривая обучения языку Python более гладкая, что позволяет ученику быстрее стать продуктивным. Однако есть и сложные моменты, с которыми вы столкнетесь по мере приобретения опыта.

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

С помощью Python вы можете написать все, что хотите, и совершенно бесплатно использовать это где угодно. Никто не скажет, прочитав вашу программу: «Ах, какая милая программка! Будет жаль, если с ней что-нибудь случится».

Python запускается практически везде и имеет «встроенные батарейки» — огромное количество разнообразного ПО в стандартных библиотеках. В этой книге имеется множество примеров использования стандартной библиотеки и полезного стороннего кода.

Но основная причина использования Python вам, возможно, покажется неожиданной: как правило, люди любят работать с этим языком, а не рассматривают его как необходимое зло для решения задачи — он подходит их образу мышления. Часто разработчики, когда им приходится программировать на другом языке, говорят, что им не хватает какой-то возможности Python. И это выделяет Python на фоне всех его «коллег».

Когда не стоит использовать Python

Python не всегда будет наилучшим выбором.

Он не установлен по умолчанию. В приложении Б показано, как установить Python, если он еще не установлен на вашем компьютере.

Python достаточно быстрый для большинства приложений, но его скорости может оказаться недостаточно для наиболее требовательных из них. Если ваша программа проводит большую часть времени за вычислениями, что в технических терминах называется «ограничена быстродействием процессора (CPU-bound)», то языки С, С++, Java, Rust или Go справятся с задачей гораздо лучше, чем Python. Но не всегда!

Учтите следующие обстоятельства.

Иногда более качественный алгоритм (пошаговое решение) в Python превосходит неэффективный алгоритм в С. Более высокая скорость разработки в Python дает больше времени для экспериментов в поисках альтернативных решений.

• Во многих приложениях (особенно в веб-приложениях) программа «бьет баклуши» в ожидании ответа от сервера. Центральный процессор (компьютерный чип, который делает все расчеты) обычно не задействован, поэтому время выполнения статических и динамических программ будет примерно одинаковым.

• Стандартный интерпретатор Python написан на С и может быть улучшен с помощью дополнительного кода. Я рассмотрю этот вопрос в главе 19.

• Интерпретаторы Python становятся быстрее. Java, когда только появился, был чрезвычайно медленным, и на его ускорение ушло много времени и денег. Языком программирования Python не владеет ни одна корпорация, поэтому он улучшается последовательно и более плавно. В подразделе «PyPy» на с. 465 я расскажу о проекте PyPy и его приложениях.

У вас в работе может быть очень сложное приложение, и тогда, независимо от того, что вы делаете, Python не сможет удовлетворить все ваши требования. Обычной альтернативой в таком случае являются языки программирования С, С++ и Java. Вы также можете рассмотреть возможность использования языка Go (/), который выглядит как Python, но работает как С, или языка Rust.

Python 2 против Python 3

Вы можете столкнуться с проблемой выбора одной из двух версий Python. Python 2 существует давно и предустановлен на компьютерах с Linux и Apple. Это был отличный язык, но нет ничего идеального. В языках программирования, как и во многих других сферах, бывают ошибки косметические и легко исправимые, а бывают — сложные и требующие усилий. Исправления несовместимы: новые программы, написанные с помощью исправленного языка, не будут работать на старых системах, а старые программы не будут работать на новых.

Создатель языка Python Гвидо ван Россум () и другие разработчики решили собрать и объединить все исправления и в результате в 2008 году представили миру Python 3. Python 2 — это прошлое, а Python 3 — будущее. Финальная версия Python 2 имеет номер 2.7, и некоторое время она еще будет поддерживаться, однако на ней род заканчивается; Python 2.8 никогда не выйдет. Окончание поддержки языка Python 2 намечено на январь 2020 года. Больше не будут исправляться проблемы (в том числе проблемы с безопасностью), и многие весомые пакеты Python к этому моменту перестанут поддерживать Python 2 (/). В операционных системах также будет отключен Python 2 и, скорее всего, подключен Python 3 в качестве нового языка, используемого по умолчанию. Преобразование популярного ПО в Python 3 было постепенным, но переломный момент уже произошел и новые разработки будут вестись на Python 3.

Эта книга посвящена Python 3. Он выглядит практически так же, как и Python 2. Самое очевидное изменение — это тот факт, что print в Python 3 является функцией, поэтому вам нужно вызывать ее с помощью круглых скобок, в которых будут перечислены аргументы. А самое главное изменение — это обработка символов Unicode (она рассматривается в главе 12). На протяжении всей книги я буду обращать ваше внимание и на другие различия.

Установка Python

Чтобы не загромождать текст, я вынес детали установки Python 3 в приложение Б. Если у вас еще не установлен Python 3 или вы не до конца в этом уверены, обратитесь к приложению и посмотрите, каковы должны быть ваши действия. Да, это может быть хлопотно и трудоемко, но сделать это вам придется лишь однажды.

Запуск Python

После установки рабочей копии Python 3 вы сможете использовать ее, чтобы запускать как приведенные в этой книге программы, так и собственный код. Как же запустить программу, написанную на языке Python? Существует два основных способа.

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

В остальных случаях сохраняйте программы в виде текстовых файлов с расширением .py, а затем запускайте их, введя python и имена этих файлов.

Попробуем воспользоваться обоими методами.

Интерактивный интерпретатор

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

Интерпретатор запускается путем ввода имени основной программы Python для вашего компьютера: python, python3 или чего-то похожего. В дальнейшем мы будем предполагать, что она называется python. Если ваша программа называется по-другому, то для запуска вам следует ввести именно ее имя.

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

$ python

Python 3.7.2 (v3.7.2:9a3ffc0492, Dec 24 2018, 02:44:43)

[Clang 6.0 (clang-600.0.57)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>> 27

27

108757.png

В предыдущем примере символ $ — это обычное приглашение ввести команду вроде python в окно терминала. Мы будем использовать ее для примеров кода в этой книге, однако ваше приглашение может отличаться.

Кстати, функция print() также работает внутри интерпретатора, на случай если вам понадобится вывести что-то на экран:

>>> print(27)

27

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

Файлы Python

Если вы запишете в файл число 27 и запустите этот файл с помощью Python, он выполнится, но на экране ничего не появится. В обычных неинтерактивных программах для Python вам нужно вызывать функцию print, чтобы вывести что-то на экран, как показано в следующем фрагменте кода:

print(27)

Создадим файл программы Python и запустим его.

1. Откройте текстовый редактор.

2. Введите в него строку print(27), как это показано здесь.

3. Сохраните этот файл с именем test.py. Убедитесь, что вы сохранили его как простой текст, а не в формате вроде RTF или DOC. Вы не обязаны использовать расширение .py для файлов программ Python, но оно поможет вам запомнить предназначение файла.

4. Если вы пользуетесь графическим пользовательским интерфейсом — это касается практически каждого, — откройте окно терминала.

5. Запустите программу, введя следующую строку:

$ python test.py

Вы должны увидеть такую строку:

27

Сработало? Если да, то примите мои поздравления по поводу того, что вы запустили свою первую автономную программу на Python!

Что дальше?

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

Базовый способ разработки программы на Python — применение простого текстового редактора и окна терминала. В рамках этой книги я использую именно такие редакторы, иногда показывая интерактивные сессии работы с терминалом, а иногда — фрагменты файлов. Вам следует знать, что существует множество интегрированных сред разработки (integrated development environment, IDE) для Python. Они могут предоставить вам графические пользовательские интерфейсы, помогающие в редактировании текста, и экраны помощи. Более подробно об этом вы прочитаете в главе 19.

Момент просветления

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

>>> import this

 

Красивое лучше, чем уродливое.

Явное лучше, чем неявное.

Простое лучше, чем сложное.

Сложное лучше, чем запутанное.

Одноуровневое лучше, чем вложенное.

Разреженное лучше, чем плотное.

Читаемость имеет значение.

Особые случаи не настолько особые, чтобы нарушать правила.

При этом практичность важнее безупречности.

Ошибки никогда не должны замалчиваться.

Если не замалчиваются явно.

Встретив двусмысленность, отбрось искушение угадать.

Должен существовать один — и желательно только один — очевидный способ сделать это.

Хотя поначалу он может быть и неочевиден, если вы не голландец.

Сейчас лучше, чем никогда.

Хотя никогда зачастую лучше, чем прямо сейчас.

Если реализацию сложно объяснить — идея плоха.

Если реализацию легко объяснить — идея, возможно, хороша.

Пространства имен — отличная штука! Будем делать их побольше!

На протяжении всей книги я буду приводить примеры, иллюстрирующие эти утверждения.

Читайте далее

В следующей главе мы поговорим о типах данных и переменных в Python. Это подготовит вас к чтению тех глав, в которых подробно рассматриваются типы данных и структуры кода Python.

Упражнения

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

1.1. Если вы еще не установили Python 3, сделайте это сейчас. Прочтите приложение Б, чтобы узнать детали.

1.2. Запустите интерактивный интерпретатор Python 3. Детали опять же вы найдете в приложении Б. Интерпретатор должен вывести несколько строк о себе, а затем строку, начинающуюся с символов >>>. Перед вами приглашение для ввода команд Python.

1.3. Немного поэкспериментируйте с интерпретатором. Используйте его как калькулятор и наберите 8*9. Нажмите клавишу Enter, чтобы увидеть результат. Python должен вывести 72.

1.4. Теперь введите число 47 и нажмите клавишу Enter. Появилось ли число 47 в следующей строке?

1.5. Теперь введите print(47) и нажмите клавишу Enter. Появилось ли снова число 47 в следующей строке?

Если вы не знаете, что это значит, откройте приложение Б, чтобы получить детальную информацию для различных операционных систем.

Назад: Часть I. Основы Python
Дальше: Глава 2. Данные: типы, значения, переменные и имена

dofermerdat
этот. породы кроликов с фотографиями мясныефермер ру форум рассадакрупнейшие сельскохозяйственные районы зарубежной европыкрс мясо