IDLE — не лучший вариант, когда дело доходит до написания программ на Python. Поскольку программирование полезнее начинать изучать с освоения самого языка, многие разработчики предпочитают другие текстовые редакторы и интегрированные среды разработки (Integrated Development Environment, IDE). Я не буду здесь о них подробно рассказывать, но сообщество Python имеет список поддерживающих Python редакторов, покрывающий широкий спектр платформ и лицензий.
Вы также можете взглянуть на список IDE, поддерживающих Python, правда, пока немногие из них поддерживают Python 3. Один из них — PyDev, плагин для Eclipse [1], превращающий его в полноценную среду разработки на Python. И Eclipse, и PyDev кроссплатформенные и открытые.
На коммерческом фронте есть Komodo IDE от ActiveState. Его нужно лицензировать для каждого пользователя, но студентам дают скидки, а также есть возможность бесплатно ознакомиться с продуктом в течение ограниченного периода.
Я пишу на Python девять лет, и делаю это в GNU Emacs [2], а отлаживаю в оболочке Python в командной строке. В разработке на Python нет более правильных или менее правильных способов. Делайте то, что считаете правильным, то, что работает для вас.
Примечания
1. Написано немного путано, но так оно и есть. По теме можно почитать w:en:PATH (variable). — Прим. пер.
2. Обучающий курс на английском языке. В Викиучебнике доступен его перевод на русский — Учебник Python 3.1. — Прим. пер.
3. Papaya whip (англ.) — мусс из папайи. — Прим. пер.
Ваша первая программа на Python
Не убегайте от проблем, не осуждайте себя и не несите своё бремя в праведном безмолвии. У вас есть проблема? Прекрасно! Это пойдёт на пользу! Радуйтесь: погрузитесь в неё и исследуйте! |
Досточтимый Хенепола Гунаратана |
Погружение
Обычно книги о программировании начинаются с кучи скучных глав о базовых вещах постепенно переходят к созданию чего-нибудь полезного. Давайте всё это пропустим. Вот вам готовая, работающая программа на Python. Возможно, вы ровным счётом ничего в ней не поймёте. Не беспокойтесь об этом, скоро мы разберём её строчка за строчкой. Но сначала прочитайте код и посмотрите, что вы сможете извлечь из него.
[humansize.py]
SUFFIXES = {1000: ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
1024: ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']}
def approximate_size(size, a_kilobyte_is_1024_bytes=True):
'''Преобразует размер файла в удобочитаемую для человека форму.
Ключевые аргументы:
size -- размер файла в байтах
a_kilobyte_is_1024_bytes -- если True (по умолчанию), используются степени 1024
если False, используются степени 1000
Возвращает: текстовую строку (string)
'''
if size < 0:
raise ValueError('число должно быть неотрицательным')
multiple = 1024 if a_kilobyte_is_1024_bytes else 1000
for suffix in SUFFIXES[multiple]:
size /= multiple
if size < multiple:
return '{0:.1f} {1}'.format(size, suffix)
raise ValueError('число слишком большое')
if __name__ == '__main__':
print(approximate_size(1000000000000, False))
print(approximate_size(1000000000000))
Теперь давайте запустим эту программу из командной строки. В Windows это будет выглядеть примерно так:
c:\home\diveintopython3\examples> c:\python31\python.exe humansize.py
1.0 TB
931.3 GiB
В Mac OS X и Linux, будет почти то же самое:
you@localhost:~/diveintopython3/examples$ python3 humansize.py
1.0 TB
931.3 GiB
Что сейчас произошло? Вы выполнили свою первую программу на Python. Вы вызвали интерпретатор Python в командной строке и передали ему имя скрипта, который хотели выполнить. В скрипте определена функция approximate_size(), которая принимает точный размер файла в байтах и вычисляет «красивый» (но приблизительный) размер. (Возможно, вы видели это в Проводнике Windows, в Mac OS X Finder, в Nautilus, Dolphin или Thunar в Linux. Если отобразить папку с документами в виде таблицы, файловый менеджер в каждой её строке покажет иконку, название документа, размер, тип, дату последнего изменения и т. д. Если в папке есть 1093-байтовый файл с названием «TODO», файловый менеджер не покажет «TODO 1093 байта»; вместо этого он скажет что-то типа «TODO 1 КБ». Именно это и делает функция approximate_size().)
Посмотрите на последние строки скрипта, вы увидите два вызова print(approximate_size(аргументы)). Это вызовы функций. Сначала вызывается approximate_size(), которой передаётся несколько аргументов, затем берётся возвращённое ею значение и передаётся прямо в функцию print(). Функция print() встроенная, вы нигде не найдёте её явного объявления. Её можно только использовать, где угодно и когда угодно. (Есть множество встроенных функций, и ещё больше функций, которые выделены в отдельные модули. Терпение, непоседа.)
Итак, почему при выполнении скрипта в командной строке, всегда получается один и тот же результат? Мы ещё дойдём до этого. Но сначала давайте посмотрим на функцию approximate_size().
Объявление функций
В Python есть функции, как и в большинстве других языков, но нет ни отдельных заголовочных файлов, как в C++, ни конструкций interface/implementation, как в Паскале. Когда вам нужна функция, просто объявите её, например, так:
def approximate_size(size, a_kilobyte_is_1024_bytes=True):
Когда вам нужна функция, просто объявите её.
Объявление начинается с ключевого слова def, затем следует имя функции, а за ним аргументы в скобках. Если аргументов несколько, они разделяются запятыми.
К тому же, стоит заметить, что в объявлении функции не задаётся тип возвращаемых данных. Функции в Python не определяют тип возвращаемых ими значений; они даже не указывают, существует ли возвращаемое значение вообще. (На самом деле, любая функция в Python возвращает значение; если в функции выполняется инструкция return, она возвращает указанное в этой инструкции значение, если нет — возвращает None — специальное нулевое значение.)
В некоторых языках программирования функции (возвращающие значение) объявляются ключевым словом function, а подпрограммы (не возвращающие значений) — ключевым словом sub. В Python же подпрограмм нет. Все функции возвращают значение (даже если оно None), и всегда объявляются ключевым словом def. |
Функция approximate_size() принимает два аргумента: size и kilobyte_is_1024_bytes, но ни один из них не имеет типа. В Python тип переменных никогда не задаётся явно. Python вычисляет тип переменной и следит за ним самостоятельно.
В Java и других языках со статической типизацией необходимо указывать тип возвращаемого значения и каждого аргумента функции. В Python явно указывать тип, для чего-либо, не нужно. Python самостоятельно отслеживает типы переменных на основе присваиваемых им значений. |