MyTetra Share
Делитесь знаниями!
3. Неформальное введение в Python
Время создания: 29.07.2019 23:51
Раздел: Разные закладки - Python - Перевод документации Python 3.x - 1. Документация
Запись: xintrea/mytetra_db_adgaver_new/master/base/1515942421hloqol9ymy/text.html на raw.githubusercontent.com

3. Неформальное введение в Python


  • Использование Python в качестве калькулятора
  • Числа
  • Строки
  • Списки
  • Первые шаги к программированию


В следующих примерах ввод и вывод различаются присутствием или отсутствием приглашений (>>> (docs.python.org/3/glossary.html#term) и ... (docs.python.org/3/glossary.html#term-1)): чтобы повторить пример, вы должны ввести все после приглашения, когда оно появляется; строки, которые не начинаются с приглашения, являются выводом интерпретатора. Заметьте, что вторичное приглашение на отдельной строке в примере означает, что вы должны ввести пустую строку; это используется для окончания многострочной команды.

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

Несколько примеров:

# это первый комментарий

spam = 1 # а это второй комментарий

# ... и теперь третий!

text = "# Это не комментарий, т. к. это находится внутри кавычек."

3.1. Использование Python в качестве калькулятора

Испытаем несколько простых команд Python. Запустите интерпретатор и дождитесь первичного приглашения >>>. (Это не должно занять много времени.)

3.1.1. Числа

Интерпретатор действует как простой калькулятор: вы можете ввести в него выражение, и он выведет результат. Синтаксис выражения простой: операторы +, -, * и / работают также как в большинстве других языках (например, Pascal или C); круглые скобки могут быть использованы для группировки. Например:

>>> 2 + 2

4

>>> 50 - 5*6

20

>>> (50 - 5*6) / 4

5.0

>>> 8 / 5 # деление всегда возвращает число с плавающей точкой

1.6

Целые числа (например, 2, 4, 20) имеют тип int , другие с дробной частью (например, 5.0, 1.6) имеют тип float . Далее в учебнике мы подробнее познакомимся с числовыми типами.

Деление (/) всегда возвращает вещественное число. Чтобы выполнить floor division (docs.python.org/3/glossary.html#term-floor-division) и получить целый результат (отбрасыванием какой-либо дробной части), вы можете использовать оператор //; для вычисления остатка можете использовать %:

>>> 17 / 3 # классическое деление возвращает вещественное число

5.666666666666667

>>>

>>> 17 // 3 # деление нацело отбрасывает дробную часть

5

>>> 17 % 3 # оператор % возвращает остаток от деления

2

>>> 5 * 3 + 2 # результат * делитель + остаток

17

В Python возможно использовать оператор ** для вычисления степени [ 1]:

>>> 5 ** 2 # 5 в квадрате

25

>>> 2 ** 7 # 2 в степени 7

128

Знак равенства (=) используется для присваивания значения переменной. При этом никакого результата не отображается перед следующим интерактивным приглашением:

>>> width = 20

>>> height = 5 * 9

>>> width * height

900

Если переменная не "определена" (не присвоено значение), попытка использовать ее выдаст вам ошибку:

>>> n # попытка доступа к неопределенной переменной

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

NameError: name 'n' is not defined

Есть полная поддержка для чисел с плавающей точкой; операторы со смешанными типами операндов конвертируют целый операнд в число с плавающей точкой:

>>> 3 * 3.75 / 1.5

7.5

>>> 7.0 / 2

3.5

В интерактивном режиме последнее выведенное выражение присваивается переменной _. Это означает, что когда вы используете Python как настольный калькулятор, то в какой-то степени легче продолжать вычисления, например:

>>> tax = 12.5 / 100

>>> price = 100.50

>>> price * tax

12.5625

>>> price + _

113.0625

>>> round(_, 2)

113.06

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

В дополнение к int  и float  Python поддерживает другие типы чисел, такие как Decimal (docs.python.org/3/library/decimal.html#decimal.Decimal) и Fraction (docs.python.org/3/library/fractions.html#fractions.Fraction). Python также имеет встроенную поддержку для комплексных чисел  и использует суффикс j или J для обозначения мнимой части (например, 3+5j).

3.1.2. Строки

Кроме чисел Python также может манипулировать строками, которые могут быть описаны несколькими способами. Они могут быть заключены в одинарные кавычки ('...') или двойные кавычки ("...") с одинаковым результатом [ 2]. \ может быть использован для экранирования кавычек:

>>> 'spam eggs' # одинарные кавычки

'spam eggs'

>>> 'doesn\'t' # используйте \' для экранирования одиночной кавычки...

"doesn't"

>>> "doesn't" # ...или вместо этого используйте двойные кавычки

"doesn't"

>>> '"Yes," he said.'

'"Yes," he said.'

>>> "\"Yes,\" he said."

'"Yes," he said.'

>>> '"Isn\'t," she said.'

'"Isn\'t," she said.'

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

>>> '"Isn\'t," she said.'

'"Isn\'t," she said.'

>>> print('"Isn\'t," she said.')

"Isn't," she said.

>>> s = 'First line.\nSecond line.' # \n означает новую строку

>>> s # без print(), \n содержится в выводе

'First line.\nSecond line.'

>>> print(s) # с print(), \n создает новую строку

First line.

Second line.

Если вы не хотите, чтобы символы, которым предшествует \, интерпретировались как специальные, то можете использовать raw string (сырые строки - прим. перев.), добавив r перед первой кавычкой:

>>> print('C:\some\name') # здесь \n означает новую строку!

C:\some

ame

>>> print(r'C:\some\name') # обратите внимание на r перед кавычкой

C:\some\name

Строковые литералы могут охватывать множество строк. Один способ - это использование тройных кавычек: """...""" или '''...'''. Конец строки по-умолчанию обозначает переход на новою, но есть возможность предотвратить это, добавив \ в конец строки. Следующий пример:

print("""\

Usage: thingy [OPTIONS]

-h Display this usage message

-H hostname Hostname to connect to

""")

дает следующий вывод (заметьте, что начальная новая строка не включена):

Usage: thingy [OPTIONS]

-h Display this usage message

-H hostname Hostname to connect to

Строки могут быть соединены (склеены вместе) оператором + и повторены с помощью *:

>>> # 3 раза 'un' с последующим 'ium'

>>> 3 * 'un' + 'ium'

'unununium'

Два или более строковых литерала (т. е. когда каждый заключен в кавычки), следующих друг за другом, автоматически конкатенируются.

>>> 'Py' 'thon'

'Python'

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

>>> prefix = 'Py'

>>> prefix 'thon' # не может соединить переменную и строковый литерал

...

SyntaxError: invalid syntax

>>> ('un' * 3) 'ium'

...

SyntaxError: invalid syntax

Если вы хотите конкатенировать переменные или переменную и литерал, используйте +:

>>> prefix + 'thon'

'Python'

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

>>> text = ('Put several strings within parentheses '

'to have them joined together.')

>>> text

'Put several strings within parentheses to have them joined together.'

Строка может быть проиндексирована, первый символ имеет индекс 0. Отдельный символьный тип отсутствует, символ - это просто строка единичной размерностью:

>>> word = 'Python'

>>> word[0] # символ в позиции 0

'P'

>>> word[5] # символ в позиции 5

'n'

Индексы также могут быть отрицательными числами для начала отсчета справа:

>>> word[-1] # последний символ

'n'

>>> word[-2] # второй с конца символ

'o'

>>> word[-6]

'P'

Заметьте, что поскольку -0 - это тоже самое, что 0, то отрицательные индексы начинаются с -1.

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

>>> word[0:2] # символы от позиции 0 (включая) до 2 (исключая)

'Py'

>>> word[2:5] # символы от позиции 2 (включая) до 5 (исключая)

'tho'

Заметьте, что начало всегда включается, а конец всегда исключается. Это обеспечивает то, что s[:i] + s[i:] всегда равно s:

>>> word[:2] + word[2:]

'Python'

>>> word[:4] + word[4:]

'Python'

Индексация срезов имеет полезные свойства по умолчанию; опущенный первый индекс по умолчанию обозначает ноль, опущенный второй индекс по умолчанию обозначает размер строки, с которой берется срез.

>>> word[:2] # символ от начала до позиции 2 (исключая)

'Py'

>>> word[4:] # символ от позиции 4 (включая) до конца

'on'

>>> word[-2:] # символы от второго с конца (включая) до конца

'on'

Один из способов запомнить, как работают срезы, - это думать об индексах как указывающих между символами, левый край первого символа нумеруется 0. Тогда как правый край последнего символа строки из n символов имеет индекс n, например:

+---+---+---+---+---+---+

| P | y | t | h | o | n |

+---+---+---+---+---+---+

0 1 2 3 4 5 6

-6 -5 -4 -3 -2 -1

Первый ряд чисел дает позицию индексов 0...6 в строке; второй ряд дает соответствующие отрицательные индексы. Срез от i до j состоит из всех символов между краями, отмеченными i и j соответственно.

Для неотрицательных индексов длина среза представляет собой разность индексов, если оба находятся в границах. Например, длина word[1:3] равна 2.

Попытка использовать индекс, который является слишком большим, приведет к ошибке:

>>> word[42] # у word только 6 символов

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

IndexError: string index out of range

Однако индексы вне диапазона обрабатываются корректно при использовании для взятия среза:

>>> word[4:42]

'on'

>>> word[42:]

''

Строки Python не могут быть изменены - они неизменяемы (docs.python.org/3/glossary.html#term-immutable). Поэтому присвоение по индексированной позиции в строке приводит к ошибке:

>>> word[0] = 'J'

...

TypeError: 'str' object does not support item assignment

>>> word[2:] = 'py'

...

TypeError: 'str' object does not support item assignment

Если вам нужна другая строка, следует создать новую строку:

>>> 'J' + word[1:]

'Jython'

>>> word[:2] + 'py'

'Pypy'

Встроенная функция len()  возвращает длину строки:

>>> s = 'supercalifragilisticexpialidocious'

>>> len(s)

34

Смотрите также:

  • Тип текстовой последовательности — str  
    Строки являются примером типов последовательностей и поддерживают обычные операции, поддерживаемые такими типами.
  • Методы строк  
    Строки поддерживают большое число методов для основных преобразований и поиска.
  • Formatted string literals (docs.python.org/3/reference/lexical_analysis.html#f-strings)
    Строковые литералы со встроенными выражениями.
  • Format String Syntax (docs.python.org/3/library/string.html#formatstrings)
    Информация о форматировании строк с помощью str.format() .
  • printf-стиль форматирования строки
    Старые операции форматирования вызываются, когда строки являются левым операндом оператора %, описанного более подробно здесь.

3.1.3. Списки

Python'у известно определенное количество сложных типов данных, используемых для группировки разных значений. Наиболее гибким является list (список - прим. пер.), который может быть описан как список разделенных запятой значений (элементов) между квадратными скобками. Списки могут включать элементы различных типов, но обычно все элементы имеют одинаковый тип.

>>> squares = [1, 4, 9, 16, 25]

>>> squares

[1, 4, 9, 16, 25]

Как строки (и все другие встроенные типы последовательностей (docs.python.org/3/glossary.html#term-sequence)), списки могут быть проиндексированы и из них можно брать срезы:

>>> squares[0] # индекс возвращает элемент

1

>>> squares[-1]

25

>>> squares[-3:] # срез возвращает новый список

[9, 16, 25]

Все операции взятия среза возвращают новый список, содержащий запрошенные элементы. Это значит, что ниже следующий срез возвращает новую (поверхностную) копию списка:

>>> squares[:]

[1, 4, 9, 16, 25]

Списки также поддерживают такую операцию как конкатенацию:

>>> squares + [36, 49, 64, 81, 100]

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

В отличие от строк, которые неизменяемые (docs.python.org/3/glossary.html#term-immutable), списки являются изменяемым (docs.python.org/3/glossary.html#term-mutable) типом, т. е. есть возможность изменить их содержание:

>>> cubes = [1, 8, 27, 65, 125] # что-то здесь не так

>>> 4 ** 3 # 4 в кубе равно 64, а не 65!

64

>>> cubes[3] = 64 # замена ошибочного значения

>>> cubes

[1, 8, 27, 64, 125]

Вы также можете добавить новый элемент в конец списка, используя метод append() (мы узнаем о методах больше позже):

>>> cubes.append(216) # добавление куба 6-ти

>>> cubes.append(7 ** 3) # и куба 7-ми

>>> cubes

[1, 8, 27, 64, 125, 216, 343]

Присвоение срезов также возможно, и этим можно даже изменить размер списка или полностью его очистить:

>>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']

>>> letters

['a', 'b', 'c', 'd', 'e', 'f', 'g']

>>> # замена нескольких значений

>>> letters[2:5] = ['C', 'D', 'E']

>>> letters

['a', 'b', 'C', 'D', 'E', 'f', 'g']

>>> # теперь удалим их

>>> letters[2:5] = []

>>> letters

['a', 'b', 'f', 'g']

>>> # очистим список, заменив все элементы на пустой список

>>> letters[:] = []

>>> letters

[]

Встроенная функция len()  также применима к спискам:

>>> letters = ['a', 'b', 'c', 'd']

>>> len(letters)

4

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

>>> a = ['a', 'b', 'c']

>>> n = [1, 2, 3]

>>> x = [a, n]

>>> x

[['a', 'b', 'c'], [1, 2, 3]]

>>> x[0]

['a', 'b', 'c']

>>> x[0][1]

'b'

3.2. Первые шаги к программированию

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

>>> # ряд Фибоначчи:

... # сумма двух элементов определяет следующий

... a, b = 0, 1

>>> while b < 10:

... print(b)

... a, b = b, a+b

...

1

1

2

3

5

8

Этот пример знакомит с несколькими новыми свойствами.

  • Первая строка содержит множественное присваивание: переменные a и b одновременно получают новые значения 0 и 1. В последней строке это используется опять, демонстрируя, что сначала выражения с правой стороны полностью оцениваются, прежде чем произойдет какое-либо присваивание. Выражения с правой стороны выполняются слева направо.
  • Цикл while (docs.python.org/3/reference/compound_stmts.html#while) выполняется до тех пор, пока условие (здесь b < 10) остается верным. В Python, как в C, любое ненулевое численное значение является правдой; ноль является ложью. Условие может также быть строкой или списком, в действительности любой последовательностью; все с ненулевой длинной является правдой, пустая последовательность является ложью. Проверка, используемая в примере, является простым сравнением. Стандартные операторы сравнения записываются также как в C: < (меньше, чем), > (больше, чем), == (равно), <= (меньше или равно), >= (больше или равно) и != (не равно).
  • Тело цикла имеет отступ: в Python отступ - это способ группировки выражений. В интерактивном режиме вы должны ввести табуляцию или пробел(ы) для каждой строки с отступом. На практике вы будете подготавливать более сложный ввод для Python с помощью текстового редактора; все приличные текстовые редакторы имеют автоматическую установку отступов. Когда составное выражение вводится в интерактивном режиме, за ним должна следовать пустая строка, чтобы указать завершение (поскольку синтаксический анализатор не может угадать, когда вы ввели последнюю строку). Обратите внимание, что каждая строка в основном блоке должна быть с отступом на одно и то же значение.
  • Функция print()  выводит значение переданных ей аргумента(ов). Это отличается от просто вывода выражений, которые вы хотите вывести (как мы ранее делали раньше в примерах с калькулятором) способом обработки множества аргументов, величин с плавающей точкой и строк. Строки печатаются без кавычек, и между элементами вставляются пробелы, таким образом вы можете красиво форматировать объекты, подобно этому:

>>> i = 256*256

>>> print('The value of i is', i)

The value of i is 65536

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

>>> a, b = 0, 1

>>> while b < 1000:

... print(b, end=',')

... a, b = b, a+b

...

1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,

Примечания

[ 1] Поскольку ** имеет более высокий приоритет, чем -, то -3**2 будет интерпретировано как -(3**2) и поэтому даст результат -9. Чтобы избежать этого и получить 9, вы можете использовать (-3)**2.

[ 2] В отличие от других языков специальные символы, такие как \n, имеют одинаковое значение как в одинарных ('...'), так и двойных ("...") кавычках. Разница между двумя вариантами только в том, что в одинарных кавычках вам не надо экранировать " (но вы должны экранировать \') и наоборот.

Создано

2015-08-07

Обновлено

2017-05-04

Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования