Документация Python неофициальный перевод

introduction.md

564 строк · 35.8 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/2.7/tutorial/introduction.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 3. Неформальное введение в Python89В следующих примерах ввод и вывод различаются наличием или отсутствием приглашений ([\>\>\>](https://python-all.ru/2.7/glossary.html#term-0) и [](https://python-all.ru/2.7/glossary.html#term-1)): чтобы повторить пример, необходимо ввести всё после приглашения, когда оно появляется; строки, не начинающиеся с приглашения, являются выводом интерпретатора. Обратите внимание, что вторичное приглашение на отдельной строке в примере означает, что нужно ввести пустую строку; это используется для завершения многострочной команды.1011Многие примеры в этом руководстве, даже те, которые вводятся в интерактивном приглашении, содержат комментарии. Комментарии в Python начинаются с символа решётки, `#`, и продолжаются до конца физической строки. Комментарий может находиться в начале строки, после пробелов или кода, но не внутри строкового литерала. Символ решётки внутри строкового литерала – это просто символ решётки. Поскольку комментарии служат для пояснения кода и не интерпретируются Python, их можно опускать при вводе примеров.1213Несколько примеров:1415```python16# это первый комментарий17spam = 1  # а это второй комментарий18          # ... и теперь третий!19text = "# This is not a comment because it's inside quotes."20```2122## 3.1. Использование Python в качестве калькулятора2324Давайте попробуем несколько простых команд Python. Запустите интерпретатор и дождитесь основного приглашения, `>>>`. (Это не должно занять много времени.)2526### 3.1.1. Числа2728Интерпретатор работает как простой калькулятор: можно ввести выражение в него и он выведет значение. Синтаксис выражений прост: операторы `+`, `-`, `*` и `/` работают так же, как в большинстве других языков (например, Pascal или C); круглые скобки (`()`) можно использовать для группировки. Например:2930```python31>>> 2 + 232433>>> 50 - 5*6342035>>> (50 - 5.0*6) / 4365.037>>> 8 / 5.0381.639```4041Целые числа (например, `2`, `4`, `20`) имеют тип [`int`](https://python-all.ru/2.7/library/functions.html#int), числа с дробной частью (например, `5.0`, `1.6`) – тип [`float`](https://python-all.ru/2.7/library/functions.html#float). Мы узнаем больше о числовых типах позже в этом руководстве.4243Тип возвращаемого значения операции деления (`/`) зависит от её операндов. Если оба операнда имеют тип [`int`](https://python-all.ru/2.7/library/functions.html#int), выполняется [целочисленное деление](https://python-all.ru/2.7/glossary.html#term-floor-division) и возвращается [`int`](https://python-all.ru/2.7/library/functions.html#int). Если хотя бы один операнд является [`float`](https://python-all.ru/2.7/library/functions.html#float), выполняется классическое деление и возвращается [`float`](https://python-all.ru/2.7/library/functions.html#float). Оператор `//` также предусмотрен для выполнения целочисленного деления независимо от операндов. Остаток можно вычислить с помощью оператора `%`:4445```python46>>> 17 / 3  # int / int -> int47548>>> 17 / 3.0  # int / float -> float495.66666666666666750>>> 17 // 3.0  # явное целочисленное деление отбрасывает дробную часть515.052>>> 17 % 3  # оператор % возвращает остаток от деления53254>>> 5 * 3 + 2  # result * divisor + remainder551756```5758В Python можно использовать оператор `**` для возведения в степень [1](https://python-all.ru/2.7/tutorial/introduction.html#id3):5960```python61>>> 5 ** 2  # 5 в квадрате622563>>> 2 ** 7  # 2 в степени 76412865```6667Знак равенства (`=`) используется для присваивания значения переменной. После этого результат не отображается до следующего интерактивного приглашения:6869```python70>>> width = 2071>>> height = 5 * 972>>> width * height7390074```7576Если переменная не «определена» (ей не присвоено значение), попытка её использования приведёт к ошибке:7778```python79>>> n  # попытка обращения к неопределённой переменной80Traceback (most recent call last):81  File "<stdin>", line 1, in <module>82NameError: name 'n' is not defined83```8485Имеется полная поддержка чисел с плавающей запятой; операторы со смешанными типами операндов преобразуют целочисленный операнд в число с плавающей запятой:8687```python88>>> 3 * 3.75 / 1.5897.590>>> 7.0 / 2913.592```9394В интерактивном режиме последнее выведенное выражение присваивается переменной `_`. Это означает, что при использовании Python в качестве настольного калькулятора несколько упрощается продолжение вычислений, например:9596```python97>>> tax = 12.5 / 10098>>> price = 100.5099>>> price * tax10012.5625101>>> price + _102113.0625103>>> round(_, 2)104113.06105```106107Эту переменную следует рассматривать как доступную только для чтения. Не присваивайте ей значение явно – это создаст независимую локальную переменную с тем же именем, которая будет скрывать встроенную переменную с её магическим поведением.108109В дополнение к [`int`](https://python-all.ru/2.7/library/functions.html#int) и [`float`](https://python-all.ru/2.7/library/functions.html#float) Python поддерживает и другие типы чисел, такие как [`Decimal`](https://python-all.ru/2.7/library/decimal.html#decimal.Decimal) и [`Fraction`](https://python-all.ru/2.7/library/fractions.html#fractions.Fraction). Python также имеет встроенную поддержку [комплексных чисел](https://python-all.ru/2.7/library/stdtypes.html#typesnumeric), и использует суффикс `j` или `J` для обозначения мнимой части (например, `3+5j`).110111### 3.1.2. Строки112113Помимо чисел, Python может также работать со строками, которые можно записать несколькими способами. Они могут быть заключены в одинарные кавычки (`'...'`) или dвойные кавычки (`"..."`) с одним и тем же результатом [2](https://python-all.ru/2.7/tutorial/introduction.html#id4). `\` можно использовать для экранирования кавычек:114115```python116>>> 'spam eggs'  # одинарные кавычки117'spam eggs'118>>> 'doesn\'t'  # используйте \' для экранирования одинарной кавычки...119"doesn't"120>>> "doesn't"  # ...или используйте двойные кавычки121"doesn't"122>>> '"Yes," they said.'123'"Yes," they said.'124>>> "\"Yes,\" they said."125'"Yes," they said.'126>>> '"Isn\'t," they said.'127'"Isn\'t," they said.'128```129130В интерактивном интерпретаторе выводимая строка заключается в кавычки, а специальные символы экранируются обратной косой чертой. Хотя иногда это может выглядеть иначе, чем ввод (обрамляющие кавычки могут меняться), обе строки эквивалентны. Строка заключается в двойные кавычки, если она содержит одинарную кавычку и не содержит двойных; в противном случае она заключается в одинарные кавычки. Оператор [`print`](https://python-all.ru/2.7/reference/simple_stmts.html#print) выводит более читаемый результат, опуская обрамляющие кавычки и печатая экранированные и специальные символы:131132```python133>>> '"Isn\'t," they said.'134'"Isn\'t," they said.'135>>> print '"Isn\'t," they said.'136"Isn't," they said.137>>> s = 'First line.\nSecond line.'  # \n означает новую строку138>>> s  # без print символ \n попадает в вывод139'First line.\nSecond line.'140>>> print s  # с print символ \n создаёт новую строку141First line.142Second line.143```144145Если вы не хотите, чтобы символы, перед которыми стоит `\`, интерпретировались как специальные, можно использовать *сырые строки*, добавив `r` перед первой кавычкой:146147```python148>>> print 'C:\some\name'  # здесь \n означает перевод строки!149C:\some150ame151>>> print r'C:\some\name'  # обратите внимание на r перед кавычкой152C:\some\name153```154155Строковые литералы могут занимать несколько строк. Один из способов – использовать тройные кавычки: `"""..."""` или `'''...'''`. Символы конца строки автоматически включаются в строку, но это можно предотвратить, добавив `\` в конец строки. Следующий пример:156157```python158print """\159Usage: thingy [OPTIONS]160     -h                        Display this usage message161     -H hostname               Hostname to connect to162"""163```164165выводит следующий результат (обратите внимание, что начальный перевод строки не включается):166167```text168Usage: thingy [OPTIONS]169     -h                        Display this usage message170     -H hostname               Hostname to connect to171```172173Строки можно объединять (склеивать) оператором `+` и повторять оператором `*`:174175```python176>>> # 3 раза 'un', затем 'ium'177>>> 3 * 'un' + 'ium'178'unununium'179```180181Два или более *строковых литерала* (то есть заключённых в кавычки), расположенные рядом, автоматически объединяются.182183```python184>>> 'Py' 'thon'185'Python'186```187188Эта возможность особенно полезна, когда нужно разбить длинные строки:189190```python191>>> text = ('Put several strings within parentheses '192...         'to have them joined together.')193>>> text194'Put several strings within parentheses to have them joined together.'195```196197Однако это работает только с двумя литералами, но не с переменными или выражениями:198199```python200>>> prefix = 'Py'201>>> prefix 'thon'  # нельзя объединить переменную и строковый литерал202  ...203SyntaxError: invalid syntax204>>> ('un' * 3) 'ium'205  ...206SyntaxError: invalid syntax207```208209Если нужно объединить переменные или переменную и литерал, используйте `+`:210211```python212>>> prefix + 'thon'213'Python'214```215216Строки можно *индексировать* (по индексу), причём первый символ имеет индекс 0. Отдельного типа для символов нет; символ – это просто строка длины один:217218```python219>>> word = 'Python'220>>> word[0]  # символ в позиции 0221'P'222>>> word[5]  # символ в позиции 5223'n'224```225226Индексы могут быть и отрицательными числами, тогда отсчёт ведётся справа:227228```python229>>> word[-1]  # последний символ230'n'231>>> word[-2]  # предпоследний символ232'o'233>>> word[-6]234'P'235```236237Обратите внимание: поскольку -0 совпадает с 0, отрицательные индексы начинаются с -1.238239Помимо индексирования поддерживаются также *срезы*. Если индексирование используется для получения отдельных символов, то *срез* позволяет получить подстроку:240241```python242>>> word[0:2]  # символы с позиции 0 (включительно) по 2 (исключительно)243'Py'244>>> word[2:5]  # символы с позиции 2 (включительно) до 5 (исключительно)245'tho'246```247248Обратите внимание, что начальный индекс всегда включается, а конечный – всегда исключается. Это гарантирует, что `s[:i] + s[i:]` всегда равно `s`:249250```python251>>> word[:2] + word[2:]252'Python'253>>> word[:4] + word[4:]254'Python'255```256257Индексы среза имеют полезные значения по умолчанию: опущенный первый индекс по умолчанию равен нулю, а опущенный второй – длине строки, из которой берётся срез.258259```python260>>> word[:2]   # символ от начала до позиции 2 (исключительно)261'Py'262>>> word[4:]   # символы с позиции 4 (включительно) до конца263'on'264>>> word[-2:]  # символы с предпоследнего (включительно) до конца265'on'266```267268Один из способов запомнить, как работают срезы – представлять индексы *между* символами, причём левый край первого символа имеет номер 0. Тогда правый край последнего символа строки из *n* символов имеет индекс *n*, например:269270```python271 +---+---+---+---+---+---+272 | P | y | t | h | o | n |273 +---+---+---+---+---+---+274 0   1   2   3   4   5   6275-6  -5  -4  -3  -2  -1276```277278Первая строка чисел показывает позиции индексов 0…6 в строке; вторая строка – соответствующие отрицательные индексы. Срез от *i* до *j* состоит из всех символов между границами, помеченными *i* и *j* соответственно.279280Для неотрицательных индексов длина среза равна разности индексов, если оба находятся в допустимом диапазоне. Например, длина `word[1:3]` равна 2.281282Попытка использовать слишком большой индекс приведёт к ошибке:283284```python285>>> word[42]  # в слове всего 6 символов286Traceback (most recent call last):287  File "<stdin>", line 1, in <module>288IndexError: string index out of range289```290291Однако выход за границы при использовании индексов среза обрабатывается без ошибок:292293```python294>>> word[4:42]295'on'296>>> word[42:]297''298```299300Строки Python нельзя изменить – они являются [неизменяемыми](https://python-all.ru/2.7/glossary.html#term-immutable). Поэтому попытка присвоения значения элементу строки по индексу приводит к ошибке:301302```python303>>> word[0] = 'J'304  ...305TypeError: 'str' object does not support item assignment306>>> word[2:] = 'py'307  ...308TypeError: 'str' object does not support item assignment309```310311Если нужна другая строка, следует создать новую:312313```python314>>> 'J' + word[1:]315'Jython'316>>> word[:2] + 'py'317'Pypy'318```319320Встроенная функция [`len()`](https://python-all.ru/2.7/library/functions.html#len) возвращает длину строки:321322```python323>>> s = 'supercalifragilisticexpialidocious'324>>> len(s)32534326```327328> **См. также**329>330> **[Типы последовательностей – str, unicode, list, tuple, bytearray, buffer, xrange](https://python-all.ru/2.7/library/stdtypes.html#typesseq)**331>332> Строки и строки Unicode, описанные в следующем разделе, являются примерами *типов последовательностей* и поддерживают общие операции, свойственные таким типам.333>334> **[Методы строк](https://python-all.ru/2.7/library/stdtypes.html#string-methods)**335>336> Как строки, так и строки Unicode поддерживают большое количество методов для базовых преобразований и поиска.337>338> **[Синтаксис строк форматирования](https://python-all.ru/2.7/library/string.html#formatstrings)**339>340> Информация о форматировании строк с помощью [`str.format()`](https://python-all.ru/2.7/library/stdtypes.html#str.format).341>342> **[Операции форматирования строк](https://python-all.ru/2.7/library/stdtypes.html#string-formatting)**343>344> Старые операции форматирования, которые выполняются, когда строки и строки Unicode являются левым операндом оператора `%`, подробнее описаны здесь.345346### 3.1.3. Строки Unicode347348Начиная с Python 2.0 программисту доступен новый тип данных для хранения текстовой информации: объект Unicode. Его можно использовать для хранения и обработки данных Unicode (см. [http://www.unicode.org/](https://python-all.ru/2.7/tutorial/introduction.html)), и он хорошо интегрируется с существующими строковыми объектами, обеспечивая автоматическое преобразование при необходимости.349350Преимущество Unicode в том, что он предоставляет одно числовое значение (ordinal) для каждого символа во всех письменностях, используемых в современных и древних текстах. Раньше для символов письменности было доступно только 256 возможных значений. Тексты обычно были привязаны к кодовой странице, которая сопоставляла эти значения символам. Это приводило к большой путанице, особенно в отношении интернационализации программного обеспечения (обычно обозначается как `i18n``'i'` + 18 символов + `'n'`). Unicode решает эти проблемы, определяя одну кодовую страницу для всех письменностей.351352Создание строк Unicode в Python так же просто, как и создание обычных строк:353354```python355>>> u'Hello World !'356u'Hello World !'357```358359Маленькая буква `'u'` перед кавычкой указывает, что должна быть создана строка Unicode. Если вы хотите включить в строку специальные символы, это можно сделать с помощью кодировки *Unicode-Escape* в Python. Следующий пример показывает, как:360361```python362>>> u'Hello\u0020World !'363u'Hello World !'364```365366Управляющая последовательность `\u0020` указывает на вставку символа Unicode с числовым значением 0x0020 (пробел) в заданной позиции.367368Остальные символы интерпретируются с использованием их порядковых значений непосредственно как коды Unicode. Для строковых литералов в стандартной кодировке Latin-1, используемой во многих западных странах, удобно, что младшие 256 символов Unicode совпадают с 256 символами Latin-1.369370Для опытных пользователей также существует необработанный режим (raw mode), как и для обычных строк. Необходимо добавить префикс ‘ur’ к открывающей кавычке, чтобы Python использовал кодировку *Raw-Unicode-Escape*. Она будет применять вышеуказанное преобразование `\uXXXX` только в том случае, если перед маленькой буквой ‘u’ стоит нечётное количество обратных косых черт.371372```python373>>> ur'Hello\u0020World !'374u'Hello World !'375>>> ur'Hello\\u0020World !'376u'Hello\\\\u0020World !'377```378379Необработанный режим наиболее полезен, когда нужно ввести много обратных косых черт, что может быть необходимо в регулярных выражениях.380381Помимо этих стандартных кодировок, Python предоставляет целый набор других способов создания строк Unicode на основе известной кодировки.382383Встроенная функция [`unicode()`](https://python-all.ru/2.7/library/functions.html#unicode) предоставляет доступ ко всем зарегистрированным кодекам Unicode (кодировщикам и декодировщикам). Некоторые из наиболее известных кодировок, которые могут преобразовывать эти кодеки: *Latin-1*, *ASCII*, *UTF-8* и *UTF-16*. Последние две являются кодировками с переменной длиной, которые хранят каждый символ Unicode в одном или нескольких байтах. Кодировка по умолчанию обычно установлена в ASCII, которая пропускает символы в диапазоне от 0 до 127 и отвергает любые другие символы с ошибкой. Когда строка Unicode печатается, записывается в файл или преобразуется с помощью [`str()`](https://python-all.ru/2.7/library/functions.html#str), преобразование выполняется с использованием этой кодировки по умолчанию.384385```python386>>> u"abc"387u'abc'388>>> str(u"abc")389'abc'390>>> u"äöü"391u'\xe4\xf6\xfc'392>>> str(u"äöü")393Traceback (most recent call last):394  File "<stdin>", line 1, in ?395UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)396```397398Чтобы преобразовать строку Unicode в 8-битную строку с использованием определённой кодировки, объекты Unicode предоставляют метод `encode()`, который принимает один аргумент – имя кодировки. Предпочтительны имена кодировок в нижнем регистре.399400```python401>>> u"äöü".encode('utf-8')402'\xc3\xa4\xc3\xb6\xc3\xbc'403```404405Если у вас есть данные в определённой кодировке и вы хотите получить из них соответствующую строку Unicode, вы можете использовать функцию [`unicode()`](https://python-all.ru/2.7/library/functions.html#unicode), передав имя кодировки вторым аргументом.406407```python408>>> unicode('\xc3\xa4\xc3\xb6\xc3\xbc', 'utf-8')409u'\xe4\xf6\xfc'410```411412### 3.1.4. Списки413414Python поддерживает несколько *составных* типов данных, используемых для объединения других значений. Самый универсальный из них – *список* (list), который можно записать как список разделённых запятыми значений (элементов) в квадратных скобках. Списки могут содержать элементы разных типов, но обычно все элементы имеют один и тот же тип.415416```python417>>> squares = [1, 4, 9, 16, 25]418>>> squares419[1, 4, 9, 16, 25]420```421422Как и строки (и все остальные встроенные [последовательные](https://python-all.ru/2.7/glossary.html#term-sequence) типы), списки поддерживают индексацию и срезы:423424```python425>>> squares[0]  # индексация возвращает элемент4261427>>> squares[-1]42825429>>> squares[-3:]  # срез возвращает новый список430[9, 16, 25]431```432433Все операции со срезами возвращают новый список, содержащий запрошенные элементы. Это означает, что следующий срез возвращает новую (поверхностную) копию списка:434435```python436>>> squares[:]437[1, 4, 9, 16, 25]438```439440Списки также поддерживают такие операции, как конкатенация:441442```python443>>> squares + [36, 49, 64, 81, 100]444[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]445```446447В отличие от строк, которые являются [неизменяемыми](https://python-all.ru/2.7/glossary.html#term-immutable), списки – [изменяемый](https://python-all.ru/2.7/glossary.html#term-mutable) тип, то есть их содержимое можно изменять:448449```python450>>> cubes = [1, 8, 27, 65, 125]  # здесь что-то не так451>>> 4 ** 3  # куб 4 равен 64, а не 65!45264453>>> cubes[3] = 64  # заменить неверное значение454>>> cubes455[1, 8, 27, 64, 125]456```457458Также можно добавлять новые элементы в конец списка с помощью `append()` *метода* (о методах мы узнаем подробнее позже):459460```python461>>> cubes.append(216)  # добавить куб 6462>>> cubes.append(7 ** 3)  # и куб 7463>>> cubes464[1, 8, 27, 64, 125, 216, 343]465```466467Присваивание срезам также возможно, и это может даже изменить размер списка или полностью его очистить:468469```python470>>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']471>>> letters472['a', 'b', 'c', 'd', 'e', 'f', 'g']473>>> # заменить некоторые значения474>>> letters[2:5] = ['C', 'D', 'E']475>>> letters476['a', 'b', 'C', 'D', 'E', 'f', 'g']477>>> # теперь удалить их478>>> letters[2:5] = []479>>> letters480['a', 'b', 'f', 'g']481>>> # очистить список, заменив все элементы пустым списком482>>> letters[:] = []483>>> letters484[]485```486487Встроенная функция [`len()`](https://python-all.ru/2.7/library/functions.html#len) также применима к спискам:488489```python490>>> letters = ['a', 'b', 'c', 'd']491>>> len(letters)4924493```494495Списки можно вкладывать друг в друга (создавать списки, содержащие другие списки), например:496497```python498>>> a = ['a', 'b', 'c']499>>> n = [1, 2, 3]500>>> x = [a, n]501>>> x502[['a', 'b', 'c'], [1, 2, 3]]503>>> x[0]504['a', 'b', 'c']505>>> x[0][1]506'b'507```508509## 3.2. Первые шаги в программировании510511Конечно, с помощью Python можно решать и более сложные задачи, чем сложение двух и двух. Например, можно вывести начальную подпоследовательность ряда *Фибоначчи* следующим образом:512513```python514>>> # ряд Фибоначчи:515... # сумма двух элементов определяет следующий516... a, b = 0, 1517>>> while b < 10:518...     print b519...     a, b = b, a+b520...521152215232524352555268527```528529В этом примере представлено несколько новых возможностей.530531- Первая строка содержит *множественное присваивание*: переменные `a` и `b` одновременно получают новые значения 0 и 1. В последней строке этот приём используется снова, показывая, что выражения в правой части вычисляются до того, как будет выполнено любое из присваиваний. Выражения в правой части вычисляются слева направо.532- Цикл [`while`](https://python-all.ru/2.7/reference/compound_stmts.html#while) выполняется, пока условие (в данном случае: `b < 10`) остаётся истинным. В Python, как и в C, любое ненулевое целое число считается истинным; ноль – ложным. Условием может также быть строка или список, в общем, любая последовательность: всё, что имеет ненулевую длину, истинно, а пустые последовательности ложны. Проверка, используемая в примере, – это простое сравнение. Стандартные операторы сравнения записываются так же, как в C: `<` (меньше), `>` (больше), `==` (равно), `<=` (меньше или равно), `>=` (больше или равно) и `!=` (не равно).533- *Тело* цикла *отступает*: отступы – это способ Python группировать инструкции. В интерактивной подсказке нужно вводить табуляцию или пробел(ы) для каждой строки с отступом. На практике для более сложного ввода в Python готовят код в текстовом редакторе; все приличные редакторы имеют функцию автоматического отступа. При интерактивном вводе составной инструкции после неё должна следовать пустая строка, чтобы указать завершение (поскольку синтаксический анализатор не может угадать, когда введена последняя строка). Обратите внимание, что каждая строка внутри одного базового блока должна иметь одинаковый отступ.534- Оператор [`print`](https://python-all.ru/2.7/reference/simple_stmts.html#print) выводит значение переданного ему выражения (или выражений). Он отличается от простого ввода выражения (как мы делали ранее в примерах с калькулятором) тем, как обрабатывает несколько выражений и строк. Строки выводятся без кавычек, а между элементами вставляется пробел, поэтому можно красиво отформатировать вывод, например:535536  ```python537  >>> i = 256*256538  >>> print 'The value of i is', i539  The value of i is 65536540  ```541542  Завершающая запятая предотвращает перевод строки после вывода:543544  ```python545  >>> a, b = 0, 1546  >>> while b < 1000:547  ...     print b,548  ...     a, b = b, a+b549  ...550  1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987551  ```552553  Обратите внимание, что интерпретатор вставляет перевод строки перед выводом следующего приглашения, если последняя строка не была завершена.554555Сноски556557**[1](https://python-all.ru/2.7/tutorial/introduction.html#id1)**558559Поскольку `**` имеет более высокий приоритет, чем `-`, `-3**2` будет интерпретировано как `-(3**2)` и в результате даст `-9`. Чтобы избежать этого и получить `9`, можно использовать `(-3)**2`.560561**[2](https://python-all.ru/2.7/tutorial/introduction.html#id2)**562563В отличие от других языков, специальные символы, такие как `\n`, имеют одинаковое значение как в одинарных (`'...'`), так и в двойных (`"..."`) кавычках. Единственное различие между ними: внутри одинарных кавычек не нужно eкранировать `"` (но нужно экранировать `\'`), и наоборот.564