|
|||||||
Время создания: 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 В следующих примерах ввод и вывод различаются присутствием или отсутствием приглашений (>>> (docs.python.org/3/glossary.html#term) и ... (docs.python.org/3/glossary.html#term-1)): чтобы повторить пример, вы должны ввести все после приглашения, когда оно появляется; строки, которые не начинаются с приглашения, являются выводом интерпретатора. Заметьте, что вторичное приглашение на отдельной строке в примере означает, что вы должны ввести пустую строку; это используется для окончания многострочной команды. Многие из примеров в данном руководстве, даже те, которые вводятся в интерактивном режиме, включают комментарии. Комментарии в Python начинаются с хэш-символа # и продолжаются до конца физической строки. Комментарий может появиться в начале строки или после пробела или кода, но не внутри строкового литерала. Хэш-символ внутри строки - это просто хэш-символ. Так как комментарии являются пояснением кода и не интерпретируются Python, они могут быть опущены при работе с примерами. Несколько примеров: # это первый комментарий
spam = 1 # а это второй комментарий
# ... и теперь третий!
text = "# Это не комментарий, т. к. это находится внутри кавычек."
3.1. Использование Python в качестве калькулятора Испытаем несколько простых команд Python. Запустите интерпретатор и дождитесь первичного приглашения >>>. (Это не должно занять много времени.) Интерпретатор действует как простой калькулятор: вы можете ввести в него выражение, и он выведет результат. Синтаксис выражения простой: операторы +, -, * и / работают также как в большинстве других языках (например, 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). Кроме чисел 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
Смотрите также:
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
Этот пример знакомит с несколькими новыми свойствами.
>>> 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 |
|||||||
Так же в этом разделе:
|
|||||||
![]() |
|||||||
|
|||||||
|