diff --git a/README.md b/README.md index b1b73c7..535f731 100644 --- a/README.md +++ b/README.md @@ -18,88 +18,87 @@ PS: Если вы постоянный читатель, вы можете уз Ну чтож, начнем... -# Table of Contents +# Оглавление: -- [Структура примеров](#structure-of-the-examples) - + [▶ Какое-то модное название](#-some-fancy-title) -- [Применение](#usage) -- [👀 Примеры](#-examples) - * [Раздел: Напряги мозги!](#section-strain-your-brain) - + [▶ Перво-наперво! *](#-first-things-first-) - + [▶ Иногда строки могут быть хитрыми](#-strings-can-be-tricky-sometimes) - + [▶ Осторожнее с цепочками операций](#-be-careful-with-chained-operations) - + [▶ Как не надо использовать оператор `is`](#-how-not-to-use-is-operator) - + [▶ Мистика хэширования](#-hash-brownies) - + [▶ В глубине души мы все одинаковы](#-deep-down-were-all-the-same) - + [▶ Беспорядок внутри порядка *](#-disorder-within-order-) - + [▶ Продолжай пытаться... *](#-keep-trying-) - + [▶ Для чего?](#-for-what) - + [▶ Расхождение во времени оценки](#-evaluation-time-discrepancy) - + [▶ `is not ...` не является `is(not ...)`](#-is-not--is-not-is-not-) - + [▶ Крестики-нолики, где X побеждает в первой попытке!](#-a-tic-tac-toe-where-x-wins-in-the-first-attempt) - + [▶ Переменная Шредингера](#-schrödingers-variable-) - + [▶ The chicken-egg problem *](#-the-chicken-egg-problem-) - + [▶ Отношения подклассов](#-subclass-relationships) - + [▶ Методы равенства и тождества](#-methods-equality-and-identity) - + [▶ All-true-ation *](#-all-true-ation-) - + [▶ Удивительная запятая](#-the-surprising-comma) - + [▶ Строки и обратные слеши](#-strings-and-the-backslashes) - + [▶ not knot!](#-not-knot) - + [▶ Строки с половиной тройных кавычек](#-half-triple-quoted-strings) - + [▶ What's wrong with booleans?](#-whats-wrong-with-booleans) - + [▶ Атрибуты класса и атрибуты экземпляра](#-class-attributes-and-instance-attributes) - + [▶ yielding None](#-yielding-none) - + [▶ Yielding из... возврата! *](#-yielding-from-return-) - + [▶ NaN-рефлексивность *](#-nan-reflexivity-) - + [▶ Мутация неизменного!](#-mutating-the-immutable) - + [▶ Исчезающая переменная из внешней области видимости](#-the-disappearing-variable-from-outer-scope) - + [▶ Загадочное преобразование типа ключа](#-the-mysterious-key-type-conversion) - + [▶ Посмотрим, сможете ли вы угадать это?](#-lets-see-if-you-can-guess-this) - + [▶ Exceeds the limit for integer string conversion](#-exceeds-the-limit-for-integer-string-conversion) - * [Раздел: Скользкие склоны](#section-slippery-slopes) - + [▶ Изменение словаря во время итерации по нему](#-modifying-a-dictionary-while-iterating-over-it) - + [▶ Упрямая операция `del`](#-stubborn-del-operation) - + [▶ Переменная вне области видимости](#-the-out-of-scope-variable) - + [▶ Удаление элемента списка во время итерации](#-deleting-a-list-item-while-iterating) - + [▶ zip итераторов с потерями *](#-lossy-zip-of-iterators-) - + [▶ Loop variables leak out!](#-loop-variables-leaking-out) - + [▶ Остерегайтесь мутабельных аргументов по умолчанию!](#-beware-of-default-mutable-arguments) - + [▶ Catching the Exceptions](#-catching-the-exceptions) - + [▶ Same operands, different story!](#-same-operands-different-story) - + [▶ Разрешение имен, игнорирующее область действия класса](#-name-resolution-ignoring-class-scope) - + [▶ Округление как у банкира *](#-rounding-like-a-banker-) - + [▶ Needles in a Haystack *](#-needles-in-a-haystack-) - + [▶ Splitsies *](#-splitsies-) - + [▶ Дикий импорт *](#-wild-imports-) - + [▶ Все отсортировано? *](#-all-sorted-) - + [▶ Полуночное время не существует?](#-midnight-time-doesnt-exist) - * [Раздел: Скрытые сокровища!](#section-the-hidden-treasures) - + [▶ О'кей Питон, ты можешь заставить меня летать?](#-okay-python-can-you-make-me-fly) - + [▶ `goto`, но почему?](#-goto-but-why) - + [▶ Держитесь!](#-brace-yourself) - + [▶ Давайте встретимся с дружелюбным языковым дядей на всю жизнь](#-lets-meet-friendly-language-uncle-for-life) - + [▶ Даже Python понимает, что любовь - это сложно](#-even-python-understands-that-love-is-complicated) - + [▶ Да, это существует!](#-yes-it-exists) - + [▶ Многоточие *](#-ellipsis-) - + [▶ Inpinity](#-inpinity) - + [▶ Let's mangle](#-lets-mangle) - * [Раздел: Внешность обманчива!](#section-appearances-are-deceptive) - + [▶ Пропускаете строки?](#-skipping-lines) - + [▶ Телепортация](#-teleportation) - + [▶ Ну, что-то тут нечисто...](#-well-something-is-fishy) - * [Раздел: Разное](#section-miscellaneous) - + [▶ `+=` быстрее](#--is-faster) - + [▶ Давайте создадим гигантскую строку!](#-lets-make-a-giant-string) - + [▶ Замедление поиска `dict` *](#-slowing-down-dict-lookups-) - + [▶ Раздувание экземпляров словарей *](#-bloating-instance-dicts-) - + [▶ Minor Ones *](#-minor-ones-) -- [Contributing](#contributing) -- [Благодарности](#acknowledgements) +- [Структура примеров](#структура-примеров) +- [Применение](#применение) +- [👀 Примеры](#-примеры) + * [Раздел: Напряги мозги!](#секция-напряги-мозги-) + + [▶ Перво-наперво! *](#-важное-о-главном-) + + [▶ Строки иногда ведут себя непредсказуемо.](#-строки-иногда-ведут-себя-непредсказуемо-) + + [▶ Осторожнее с цепочками операций](#-осторожнее-с-цепочками-операций-) + + [▶ Как не надо использовать оператор `is`](#-как-не-надо-использовать-оператор-is-) + + [▶ Мистика хэширования](#-мистика-хэширования-) + + [▶ В глубине души мы все одинаковы](#-в-глубине-души-мы-все-одинаковы-) + + [▶ Беспорядок внутри порядка *](#-нарушение-в-пределах-порядка--) + + [▶ Продолжай пытаться... *](#-продолжай-пытаться--) + + [▶ Для чего?](#-для-чего-) + + [▶ Расхождение во времени оценки](#-несоответствие-времени-оценки-) + + [▶ `is not ...` не является `is(not ...)`](#-is-not--is-not-is-not--) + + [▶ Крестики-нолики, где X побеждает в первой попытке!](#-крестики-нолики-где-x-побеждает-с-первой-попытки-) + + [▶ Переменная Шредингера](#-переменная-шредингера--) + + [▶ Проблема курицы и яйца *](#-проблема-курицы-и-яйца--) + + [▶ Отношения подклассов](#-отношения-между-подклассами-) + + [▶ Методы равенства и тождества](#-методы-равенства-и-тождества-) + + [▶ All-true-ation *](#-all-true-ation--) + + [▶ Неожиданная запятая](#-неожиданная-запятая-) + + [▶ Строки и обратные слеши](#-строки-и-обратные-слэши-) + + [▶ not knot!](#-not-knot-) + + [▶ Строки с половиной тройных кавычек](#-половина-строк-в-тройных-кавычках-) + + [▶ Что не так с логическими значениями?](#-что-не-так-с-логическими-значениями-) + + [▶ Атрибуты класса и атрибуты экземпляра](#-атрибуты-класса-и-экземпляра-) + + [▶ Возврат None из генератора (yielding None)](#-возврат-none-из-генератора-yielding-none-) + + [▶ Yielding из... возврата! *](#-yielding-from-return--) + + [▶ NaN-рефлексивность *](#-nan-reflexivity--) + + [▶ Мутация неизменного!](#-мутируем-немутируемое-) + + [▶ Исчезающая переменная из внешней области видимости](#-исчезновение-переменной-из-внешней-области-видимости-) + + [▶ Загадочное преобразование типа ключа](#-загадочное-преобразование-типа-ключа-) + + [▶ Посмотрим, сможете ли вы угадать это?](#-посмотрим-сможете-ли-вы-угадать-что-здесь-) + + [▶ Превышено ограничение на преобразование целочисленной строки.](#-превышено-ограничение-на-преобразование-целочисленной-строки-) + * [Раздел: Скользкие склоны](#раздел-скользкие-склоны) + + [▶ Изменение словаря во время итерации по нему](#-изменение-словаря-во-время-итерации-по-нему-) + + [▶ Упрямая операция `del`](#-упрямая-операция-del-) + + [▶ Переменная вне области видимости](#-переменная-вне-области-видимости-) + + [▶ Удаление элемента списка во время итерации](#-удаление-элемента-списка-во-время-итерации-) + + [▶ zip итераторов с потерями *](#-zip-итераторов-с-потерями--) + + [▶ Loop variables leak out!](#-loop-variables-leaking-out-) + + [▶ Остерегайтесь мутабельных аргументов по умолчанию!](#-остерегайтесь-мутабельных-аргументов-по-умолчанию-) + + [▶ Перехват исключений](#-перехват-исключений-) + + [▶ Те же операнды, другая история!](#-те-же-операнды-другая-история-) + + [▶ Разрешение имен, игнорирующее область действия класса](#-разрешение-имен-игнорирующее-область-действия-класса-) + + [▶ Округление как у банкира *](#-округление-как-у-банкира--) + + [▶ Иголки в стоге сена](#-иголки-в-стоге-сена-) + + [▶ Splitsies *](#-splitsies--) + + [▶ Дикий импорт *](#-дикий-импорт--) + + [▶ Все отсортировано? *](#-все-отсортировано--) + + [▶ Полуночное время не существует?](#-полуночное-время-не-существует-) + * [Раздел: Скрытые сокровища!](#раздел-скрытые-сокровища) + + [▶ О'кей Питон, ты можешь заставить меня летать?](#-окей-питон-ты-можешь-заставить-меня-летать-) + + [▶ `goto`, но почему?](#-goto-но-почему-) + + [▶ Держитесь!](#-держитесь-) + + [▶ Давайте встретимся с дружелюбным языковым дядей на всю жизнь](#-давайте-познакомимся-с-дружелюбным-дядей-барри-) + + [▶ Даже Python понимает, что любовь - это сложно](#-даже-python-понимает-что-любовь---это-сложно-) + + [▶ Да, это существует!](#-да-это-существует-) + + [▶ Ellipsis *](#-ellipsis-) + + [▶ Бесконечность](#-бесконечность-) + + [▶ Let's mangle](#-lets-mangle-) + * [Раздел: Внешность обманчива!](#раздел-внешность-обманчива) + + [▶ Пропускаете строки?](#-пропускаете-строки-) + + [▶ Телепортация](#-телепортация-) + + [▶ Ну, что-то тут нечисто...](#-ну-что-то-тут-нечисто-) + * [Раздел: Разное](#раздел-разное) + + [▶ `+=` быстрее](#--быстрее-) + + [▶ Давайте создадим гигантскую строку!](#-давайте-создадим-гигантскую-строку-) + + [▶ Замедление поиска `dict` *](#-замедление-поиска-dict--) + + [▶ Раздувание экземпляров словарей *](#-раздувание-экземпляров-словарей--) + + [▶ Мелочи *](#-мелочи--) +- [Содействие](#содействие-) +- [Благодарности](#благодарности-) - [🎓 Лицензия](#-license) - * [Удивите и своих друзей!](#surprise-your-friends-as-well) - * [Больше подобных материалов?](#more-content-like-this) + * [Удивите и своих друзей!](#удивите-и-своих-друзей-) + * [Нужна pdf версия?](#нужна-pdf-версия-) # Структура примеров @@ -226,7 +225,7 @@ SyntaxError: invalid syntax **Быстрый разбор что такое "моржовый оператор" (walrus)** -"Моржовый оператор" (`:=`) была введена в Python 3.8, она может быть полезна в ситуациях, когда вы хотите присвоить значения переменным в выражении. +"Моржовый оператор" (`:=`) был введён в Python 3.8, он может быть полезен в ситуациях, когда вы хотите присвоить значения переменным в выражении. ```py def some_func(): @@ -280,7 +279,8 @@ if a := some_func(): --- -### ▶ Строки иногда ведут себя непредсказуемо +### ▶ Строки иногда ведут себя непредсказуемо. [↑](#оглавление) + 1\. @@ -357,7 +357,7 @@ False --- -### ▶ Be careful with chained operations +### ▶ Осторожнее с цепочками операций. [↑](#оглавление) ```py >>> (False == False) in [False] # makes sense @@ -402,7 +402,7 @@ As per https://docs.python.org/3/reference/expressions.html#comparisons --- -### ▶ Как не надо использовать оператор `is` +### ▶ Как не надо использовать оператор `is`. [↑](#оглавление) Ниже приведен очень известный пример, представленный во всем Интернете. @@ -527,7 +527,7 @@ False --- -### ▶ Hash brownies +### ▶ Мистика хэширования. [↑](#оглавление) 1\. ```py @@ -593,7 +593,7 @@ complex --- -### ▶ В глубине души мы все одинаковы. +### ▶ В глубине души мы все одинаковы. [↑](#оглавление) ```py class WTF: @@ -642,7 +642,7 @@ True --- -### ▶ Нарушение в пределах порядка * +### ▶ Нарушение в пределах порядка *. [↑](#оглавление) ```py from collections import OrderedDict @@ -740,7 +740,7 @@ TypeError: unhashable type: 'dict' --- -### ▶ Keep trying... * +### ▶ Продолжай пытаться... * [↑](#оглавление) ```py def some_func(): @@ -801,7 +801,7 @@ Iteration 0 --- -### ▶ Для чего? +### ▶ Для чего? [↑](#оглавление) ```py some_string = "wtf" @@ -854,7 +854,7 @@ for i, some_dict[i] in enumerate(some_string): --- -### ▶ Несоответствие времени оценки +### ▶ Несоответствие времени оценки. [↑](#оглавление) 1\. ```py @@ -923,7 +923,7 @@ array_4 = [400, 500, 600] --- -### ▶ `is not ...` is not `is (not ...)` +### ▶ `is not ...` is not `is (not ...)` [↑](#оглавление) ```py >>> 'something' is not None @@ -940,7 +940,7 @@ False --- -### ▶ Крестики-нолики, где X побеждает с первой попытки! +### ▶ Крестики-нолики, где X побеждает с первой попытки! [↑](#оглавление) ```py @@ -987,7 +987,7 @@ board = [row] * 3 --- -### ▶ Переменная Шредингера * +### ▶ Переменная Шредингера * [↑](#оглавление) @@ -1063,7 +1063,7 @@ ClosureVars(nonlocals={}, globals={}, builtins={}, unbound=set()) --- -### ▶ Проблема курицы и яйца * +### ▶ Проблема курицы и яйца * [↑](#оглавление) 1\. ```py @@ -1113,7 +1113,7 @@ False --- -### ▶ Отношения между подклассами +### ▶ Отношения между подклассами [↑](#оглавление) **Вывод:** ```py @@ -1136,7 +1136,7 @@ False * Более подробное объяснение можно найти [здесь] (https://www.naftaliharris.com/blog/python-subclass-intransitivity/). --- -### ▶ Methods equality and identity +### ▶ Методы равенства и тождества [↑](#оглавление) 1. @@ -1237,7 +1237,7 @@ CPython 3.7 [решил эту проблему](https://bugs.python.org/issue26 без создания временных объектов методов. Это используется только при фактическом вызове функции доступа, так что приведенные здесь фрагменты не затронуты и по-прежнему генерируют методы :) -### ▶ All-true-ation * +### ▶ All-true-ation * [↑](#оглавление) ```py @@ -1274,7 +1274,7 @@ True --- -### ▶ Неожиданная запятая +### ▶ Неожиданная запятая [↑](#оглавление) **Вывод (< 3.6):** @@ -1306,7 +1306,7 @@ SyntaxError: invalid syntax --- -### ▶ Строки и обратные слэши +### ▶ Строки и обратные слэши [↑](#оглавление) **Вывод:** ```py @@ -1349,7 +1349,7 @@ True --- -### ▶ not knot! +### ▶ not knot! [↑](#оглавление) ```py x = True @@ -1376,7 +1376,7 @@ SyntaxError: invalid syntax --- -### ▶ Половина строк в тройных кавычках +### ▶ Половина строк в тройных кавычках [↑](#оглавление) **Вывод:** ```py @@ -1404,7 +1404,7 @@ SyntaxError: EOF while scanning triple-quoted string literal + `'''` and `"""` также являются разделителями строк в Python, что вызывает SyntaxError, поскольку интерпретатор Python ожидал завершающую тройную кавычку в качестве разделителя при сканировании текущего встреченного строкового литерала с тройной кавычкой. --- -### ▶ Что не так с логическими значениями? +### ▶ Что не так с логическими значениями? [↑](#оглавление) 1\. @@ -1494,7 +1494,7 @@ I have lost faith in truth! --- -### ▶ Атрибуты класса и экземпляра +### ▶ Атрибуты класса и экземпляра [↑](#оглавление) 1\. ```py @@ -1563,7 +1563,7 @@ True * Оператор += изменяет изменяемый объект на месте, не создавая новый объект. Таким образом, изменение атрибута одного экземпляра влияет на другие экземпляры и атрибут класса также. --- -### ▶ Возврат None из генератора (yielding None) +### ▶ Возврат None из генератора (yielding None) [↑](#оглавление) ```py some_iterable = ('a', 'b') @@ -1596,7 +1596,7 @@ def some_func(val): --- -### ▶ Yielding from... return! * +### ▶ Yielding from... return! * [↑](#оглавление) 1\. @@ -1661,7 +1661,7 @@ def some_func(x): --- -### ▶ Nan-reflexivity * +### ▶ Nan-reflexivity * [↑](#оглавление) @@ -1738,7 +1738,7 @@ True --- -### ▶ Мутируем немутируемое! +### ▶ Мутируем немутируемое! [↑](#оглавление) @@ -1776,7 +1776,7 @@ TypeError: 'tuple' object does not support item assignment --- -### ▶ Исчезновение переменной из внешней области видимости +### ▶ Исчезновение переменной из внешней области видимости. [↑](#оглавление) ```py @@ -1801,7 +1801,7 @@ NameError: name 'e' is not defined #### 💡 Объяснение: -* Source: https://docs.python.org/3/reference/compound_stmts.html#except +* Исходный код: https://docs.python.org/3/reference/compound_stmts.html#except When an exception has been assigned using `as` target, it is cleared at the end of the `except` clause. This is as if @@ -1858,7 +1858,7 @@ NameError: name 'e' is not defined --- -### ▶ The mysterious key type conversion +### ▶ Загадочное преобразование типа ключа. [↑](#оглавление) ```py class SomeClass(str): @@ -1914,7 +1914,7 @@ str --- -### ▶ Посмотрим, сможете ли вы угадать что здесь? +### ▶ Посмотрим, сможете ли вы угадать что здесь? [↑](#оглавление) ```py a, b = a[b] = {}, 5 @@ -1969,7 +1969,7 @@ a, b = a[b] = {}, 5 True ``` -### ▶ Exceeds the limit for integer string conversion +### ▶ Превышено ограничение на преобразование целочисленной строки. [↑](#оглавление) ```py >>> # Python 3.10.6 >>> int("2" * 5432) @@ -1998,9 +1998,9 @@ ValueError: Exceeds the limit (4300) for integer string conversion: --- -## Section: Slippery Slopes +## Раздел: Скользкие склоны -### ▶ Modifying a dictionary while iterating over it +### ▶ Изменение словаря во время итерации по нему. [↑](#оглавление) ```py x = {0: None} @@ -2036,7 +2036,7 @@ Yes, it runs for exactly **eight** times and stops. --- -### ▶ Stubborn `del` operation +### ▶ Упрямая операция `del`. [↑](#оглавление) @@ -2081,7 +2081,7 @@ Okay, now it's deleted :confused: --- -### ▶ The out of scope variable +### ▶ Переменная вне области видимости. [↑](#оглавление) 1\. @@ -2161,7 +2161,7 @@ UnboundLocalError: local variable 'a' referenced before assignment --- -### ▶ Deleting a list item while iterating +### ▶ Удаление элемента списка во время итерации. [↑](#оглавление) ```py list_1 = [1, 2, 3, 4] @@ -2222,7 +2222,7 @@ Can you guess why the output is `[2, 4]`? --- -### ▶ Lossy zip of iterators * +### ▶ zip итераторов с потерями *. [↑](#оглавление) ```py @@ -2271,7 +2271,7 @@ Where did element `3` go from the `numbers` list? --- -### ▶ Loop variables leaking out! +### ▶ Loop variables leaking out! [↑](#оглавление) 1\. ```py @@ -2335,7 +2335,7 @@ print(x, ': x in global') --- -### ▶ Beware of default mutable arguments! +### ▶ Остерегайтесь мутабельных аргументов по умолчанию! [↑](#оглавление) ```py @@ -2393,7 +2393,7 @@ def some_func(default_arg=[]): --- -### ▶ Catching the Exceptions +### ▶ Перехват исключений. [↑](#оглавление) ```py some_list = [1, 2, 3] @@ -2468,7 +2468,7 @@ SyntaxError: invalid syntax --- -### ▶ Same operands, different story! +### ▶ Те же операнды, другая история! [↑](#оглавление) 1\. ```py @@ -2510,7 +2510,7 @@ a += [5, 6, 7, 8] --- -### ▶ Name resolution ignoring class scope +### ▶ Разрешение имен, игнорирующее область действия класса. [↑](#оглавление) 1\. ```py @@ -2553,7 +2553,7 @@ class SomeClass: --- -### ▶ Rounding like a banker * +### ▶ Округление как у банкира *. [↑](#оглавление) Let's implement a naive function to get the middle element of a list: ```py @@ -2603,7 +2603,7 @@ It seems as though Python rounded 2.5 to 2. --- -### ▶ Needles in a Haystack * +### ▶ Иголки в стоге сена. [↑](#оглавление) @@ -2780,7 +2780,7 @@ def similar_recursive_func(a): --- -### ▶ Splitsies * +### ▶ Splitsies *. [↑](#оглавление) ```py >>> 'a'.split() @@ -2816,7 +2816,7 @@ def similar_recursive_func(a): --- -### ▶ Wild imports * +### ▶ Дикий импорт *. [↑](#оглавление) @@ -2875,7 +2875,7 @@ NameError: name '_another_weird_name_func' is not defined --- -### ▶ All sorted? * +### ▶ Все отсортировано? * [↑](#оглавление) @@ -2916,7 +2916,7 @@ False --- -### ▶ Midnight time doesn't exist? +### ▶ Полуночное время не существует?. [↑](#оглавление) ```py from datetime import datetime @@ -2950,11 +2950,11 @@ Before Python 3.5, the boolean value for `datetime.time` object was considered t -## Section: The Hidden treasures! +## Раздел: Скрытые сокровища! This section contains a few lesser-known and interesting things about Python that most beginners like me are unaware of (well, not anymore). -### ▶ Okay Python, Can you make me fly? +### ▶ О'кей Питон, ты можешь заставить меня летать? [↑](#оглавление) Well, here you go @@ -2972,7 +2972,7 @@ Sshh... It's a super-secret. --- -### ▶ `goto`, but why? +### ▶ `goto`, но почему? [↑](#оглавление) ```py @@ -3001,7 +3001,7 @@ Freedom! --- -### ▶ Держитесь! +### ▶ Держитесь! [↑](#оглавление) Если вы относитесь к тем людям, которым не нравится использование пробелов в Python для обозначения диапазонов, вы можете использовать C-стиль {} импортировав это, @@ -3027,7 +3027,7 @@ SyntaxError: not a chance --- -### ▶ Давайте познакомимся с дружелюбным Дядей Барри +### ▶ Давайте познакомимся с дружелюбным Дядей Барри. [↑](#оглавление) **Результат (Python 3.x)** @@ -3060,7 +3060,7 @@ True --- -### ▶ Даже Python понимает, что любовь - это сложно. +### ▶ Даже Python понимает, что любовь - это сложно. [↑](#оглавление) ```py import this @@ -3121,7 +3121,7 @@ True --- -### ▶ Yes, it exists! +### ▶ Да, это существует! [↑](#оглавление) **The `else` clause for loops.** One typical example might be: @@ -3165,7 +3165,7 @@ Try block executed successfully... - `else` clause after a try block is also called "completion clause" as reaching the `else` clause in a `try` statement means that the try block actually completed successfully. --- -### ▶ Ellipsis * +### ▶ Ellipsis. [↑](#оглавление) ```py def some_func(): @@ -3225,7 +3225,7 @@ Ellipsis --- -### ▶ Inpinity +### ▶ Бесконечность. [↑](#оглавление) The spelling is intended. Please, don't submit a patch for this. @@ -3244,7 +3244,7 @@ The spelling is intended. Please, don't submit a patch for this. --- -### ▶ Let's mangle +### ▶ Let's mangle. [↑](#оглавление) 1\. ```py @@ -3320,9 +3320,9 @@ AttributeError: 'A' object has no attribute '__variable' --- --- -## Section: Appearances are deceptive! +## Раздел: Внешность обманчива! -### ▶ Skipping lines? +### ▶ Пропускаете строки? [↑](#оглавление) **Результат:** ```py @@ -3358,7 +3358,7 @@ The built-in `ord()` function returns a character's Unicode [code point](https:/ --- -### ▶ Teleportation +### ▶ Телепортация. [↑](#оглавление) @@ -3391,7 +3391,7 @@ Where's the Nobel Prize? --- -### ▶ Well, something is fishy... +### ▶ Ну, что-то тут нечисто... [↑](#оглавление) ```py def square(x): @@ -3432,10 +3432,10 @@ Shouldn't that be 100? --- --- -## Section: Miscellaneous +## Раздел: Разное -### ▶ `+=` is faster +### ▶ `+=` быстрее. [↑](#оглавление) ```py @@ -3452,7 +3452,7 @@ Shouldn't that be 100? --- -### ▶ Let's make a giant string! +### ▶ Давайте создадим гигантскую строку! [↑](#оглавление) ```py def add_string_with_plus(iters): @@ -3546,7 +3546,7 @@ Let's increase the number of iterations by a factor of 10. --- -### ▶ Slowing down `dict` lookups * +### ▶ Замедление поиска `dict` *. [↑](#оглавление) ```py some_dict = {str(i): 1 for i in range(1_000_000)} @@ -3579,7 +3579,7 @@ Why are same lookups becoming slower? + This process is not reversible for the particular `dict` instance, and the key doesn't even have to exist in the dictionary. That's why attempting a failed lookup has the same effect. -### ▶ Bloating instance `dict`s * +### ▶ Раздувание экземпляров словарей *. [↑](#оглавление) ```py import sys @@ -3641,7 +3641,7 @@ What makes those dictionaries become bloated? And why are newly created objects + A small tip, if you aim to lower your program's memory footprint: don't delete instance attributes, and make sure to initialize all attributes in your `__init__`! -### ▶ Minor Ones * +### ▶ Мелочи *. [↑](#оглавление) * `join()` is a string operation instead of list operation. (sort of counter-intuitive at first usage) @@ -3786,7 +3786,7 @@ What makes those dictionaries become bloated? And why are newly created objects --- --- -# Contributing +# Содействие [↑](#оглавление) A few ways in which you can contribute to wtfpython, @@ -3800,7 +3800,7 @@ Please see [CONTRIBUTING.md](/CONTRIBUTING.md) for more details. Feel free to cr PS: Please don't reach out with backlinking requests, no links will be added unless they're highly relevant to the project. -# Acknowledgements +# Благодарности [↑](#оглавление) The idea and design for this collection were initially inspired by Denys Dovhan's awesome project [wtfjs](https://github.com/denysdovhan/wtfjs). The overwhelming support by Pythonistas gave it the shape it is in right now. @@ -3825,13 +3825,13 @@ The idea and design for this collection were initially inspired by Denys Dovhan' [license-url]: http://www.wtfpl.net [license-image]: https://img.shields.io/badge/License-WTFPL%202.0-lightgrey.svg?style=flat-square -## Surprise your friends as well! +## Удивите и своих друзей! [↑](#оглавление) If you like wtfpython, you can use these quick links to share it with your friends, [Twitter](https://twitter.com/intent/tweet?url=https://github.com/satwikkansal/wtfpython&text=If%20you%20really%20think%20you%20know%20Python,%20think%20once%20more!%20Check%20out%20wtfpython&hashtags=python,wtfpython) | [Linkedin](https://www.linkedin.com/shareArticle?url=https://github.com/satwikkansal&title=What%20the%20f*ck%20Python!&summary=If%20you%20really%20thing%20you%20know%20Python,%20think%20once%20more!) | [Facebook](https://www.facebook.com/dialog/share?app_id=536779657179021&display=page&href=https%3A%2F%2Fgithub.com%2Fsatwikkansal%2Fwtfpython"e=If%20you%20really%20think%20you%20know%20Python%2C%20think%20once%20more!) -## Need a pdf version? +## Нужна pdf версия? [↑](#оглавление) I've received a few requests for the pdf (and epub) version of wtfpython. You can add your details [here](https://satwikkansal.xyz/wtfpython-pdf/) to get them as soon as they are finished.