Python с нуля – часть 1: базовый синтаксис

PythonЭта и последующие статьи в этой серии – перевод страниц руководства Python Basic Tutorial, с небольшими дополнениями и уточнениями. Замечания и предложения можно оставить в комментариях или на странице Контакты.

Язык Python во многом схож с языками Perl, C и Java, однако между ними имеются и определённые различия. В этой главе мы рассмотрим базовый синтаксис языка Python.

Первая программа на Python

Программирование в интерактивном режиме

Вызвав интерпретатор Python без указания ему аргументом файла скрипта приведёт к вызову такой строки:

$ python
Python 2.7.6 (default, Feb 28 2014, 12:29:01)
[GCC 4.2.1 20070831 patched [FreeBSD]] on freebsd9
Type "help", "copyright", "credits" or "license" for more information.
>>>

Наберите следующий текст справа от строки приглашения Python >>> и нажмите Enter:

>>> print "Hello, Python!"

Если вы используете Python версии 3.0 и выше – вам необходимо использовать оператор (statement) print с круглыми скобками () (т.к. в Python 3 print больше относится к функции, чем к оператору, в отличии от Python 2 версии):

>>> print ("Hello, Python!")

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

В результате – интерпретатор должен выдать такой результат:

Hello, Python!

Программирование скриптов

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

Давайте напишем простой скрипт на Python. Как правило – скрипты Python имеют расширение .py. Создайте новый скрипт test.py с таким содержимым:

print "Hello, Python!"

Тут предполагается, что у вас уже установлен Python и путь к нему добавлен в переменной $PATH.

Что бы проверить это – выполните:

$ which python
/usr/local/bin/python
$ echo $PATH | grep "/usr/local/bin"
/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/home/setevoy/bin

Или так:

$ printenv | grep /usr/local/bin
SHELL=/usr/local/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/home/setevoy/bin

Обратите внимание, что путь к интерпретатору /usr/local/bin/python обычно используется в ОС FreeBSD, в системах Linux как правило Python располагается в:

$ which python
/usr/bin/python

Теперь – давайте запустим наш скрипт:

$ python test.py

Что должно дать нам такой результат:

Hello, Python!

Другой способ запуска скриптов на Python – указание пути к интерпретатору в заголовке скрипта. Такой заголовок называется shebang и начинается со знаков #!.

Давайте отредактируем наш файл test.py и приведём его к такому виду:

#!/usr/local/bin/python
print "Hello, Python!"

Теперь – установим бит выполнения:

$ chmod +x test.py

И запустим наш скрипт:

$./test.py

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

Hello, Python!

Идентификаторы в Python

Идентификаторы в Python – это имена, используемые для определения (“идентификации“) переменных, функций, классов, модулей и других объектов. Идентификатор начинается с букв A-Z или a-z, либо знака подчеркивания (_), после чего следуют ноль или больше букв (*совет – никогда не создавайте свою собственную переменную с именем “_”, т.к. это имя зарезервировано самими интерпретатором), знаков подчеркивания или цифр от 0 до 9.

В идентификаторах Python не используются знаки @, $ и %. Так же – Python чувствителен к регистру символов, т.е. Manpower и  manpower являются двумя различными именами (идентификаторами).

Вот основные правила именования идентификаторов в Python:

  • Имена классов начинаются с заглавной буквы, а все остальные идентификаторы – со строчных;
  • Если идентификатор начинается со знака подчёркивания (_) – то он является приватным;
  • Starting an identifier with two leading underscores indicates a strongly private identifier.
  • If the identifier also ends with two trailing underscores, the identifier is a language-defined special name.

Зарезервированные имена

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

and exec not
assert finally or
break for pass
class from print
continue global raise
def if return
del import try
elif in while
else is with
except lambda yield

Строки и отступы

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

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

Например, оба блока в примере ниже выполнены правильно:

>>> if True:
...   print "True"
... else:
...   print "False"
...
True

А вот второй блок в следующем примере – приведёт к ошибке интерпретатора “unexpected indent“:

>>> if True:
...   print "Answer"
...   print "True"
... else:
...   print "Answer"
...     print "False"
  File "<stdin>", line 6
    print "False"
    ^
IndentationError: unexpected indent

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

#!/usr/local/bin/python

import sys

try:
   # open file stream
   file = open(file_name, "w")
except IOError:
   print "There was an error writing to", file_name
   sys.exit()
print "Enter '", file_finish,
print "' When finished"
while file_text != file_finish:
  file_text = raw_input("Enter text: ")
  if file_text == file_finish:
    # close the file
    file.close
    break
  file.write(file_text)
  file.write("n")
file.close()
file_name = raw_input("Enter filename: ")
if len(file_name) == 0:
  print "Next time please enter something"
  sys.exit()
try:
  file = open(file_name, "r")
except IOError:
  print "There was an error reading file"
  sys.exit()
file_text = file.read()
file.close()
print file_text

Многострочные операторы

Операторы и операнды в Python как правило заканчиваются новой строкой. Однако, есть возможность использовать знак продолжения строки “” для обозначения того, что строка продолжается. Например:

>>> total = item_one +
... item_two +
... item_three

Операнды, заключённые в скобки [], {} или () не нуждаются в использовании такого символа. Например:

>>> days = ['Monday', 'Tuesday', 'Wednesday',
... 'Thursday', 'Friday']
>>> print (days)
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']

Что бы представлять себе разницу между “оператором” и “операндом” при выполнении “операции” – посмотрите на эту картинку:

operationПодробнее об операторах читайте в Python: Basic Tutorial – часть 3: базовые операторы.

Кавычки Python

В Python используются одинарные ('), двойные (") и тройные (''' или """) кавычки для обозначения строковых литералов (или просто – строк).

Тройные кавычки могут использоваться для охвата многострочного текста.

Примеры:

>>> word = 'word'
>>> sentence = "This is a sentence."
>>> paragraph = """This is a paragraph. It is
... made up of multiple lines and sentences.""

Комментарии в Python

Хеш-тег (#), который не находится внутри строки задаёт начало комментария. Все символы после # и до конца строки являются частью комментария, и Python игнорирует их.

#!/usr/bin/python

# First comment
print "Hello, Python!"; # second comment

Приведённый выше код даст такой результат:

Hello, Python!

Комментарии так же можно размещать и на одной строке после операторов или выражения, например:

name = "Madisetti" # This is again comment

Многострочные комментарии можно создать так:

# This is a comment.
# This is a comment, too.
# This is a comment, too.
# I said that already.

Или так:

>>> '''Line one
... second line
... third line'''

Пустые строки

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

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

Ожидание ввода данных от пользователя

Следующая строка программы отобразит приглашение “Press the enter key to exit” и будет ожидать от пользователя нажатия Enter:

#!/usr/bin/python

raw_input("nnPress the enter key to exit.")

Символы “nn” тут используются для создания двух новых строк и перед отображением приглашения. Как только пользователь нажмёт Enter – программа завершится.

В Python 3 функция raw_input() была заменена функцией input().

Множественные операторы в одной строке

Знак точки с запятой (;) даёт возможность разместить несколько операторов в одной строке, при этом они не должны являться блоком кода. Вот пример вызова функции в одной строке с использованием (;):

>>> import sys; x = 'foo'; sys.stdout.write(x + 'n')
foo

Множественные группы и наборы операторов

Группа операторов, которые определены в один блок кода, в Python называются “набор” (suite). Структура группы операторов, таких как if, while, def, и class и которая требует строки-заголовка для них представляют собой такой набор.

Строка заголовка начинается с определённого оператора, заканчивается двоеточием (:), а продолжение такого набора – строки с остальными операторами. Например:

if expression:
  suite
elif expression:
  suite
else:
  suite

Аргументы командной строки Python

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

$ python -h
usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Options and arguments (and corresponding environment variables):
-c cmd : program passed in as string (terminates option list)
-d : debug output from parser (also PYTHONDEBUG=x)
-E : ignore environment variables (such as PYTHONPATH)
-h : print this help message and exit

[ etc. ]