From 191ea8343bffe58765fd16f2f43d1acec7fd75e8 Mon Sep 17 00:00:00 2001 From: Vadim Nifadev <36514612+nifadyev@users.noreply.github.com> Date: Mon, 22 Apr 2024 12:02:32 +0300 Subject: [PATCH] Translate The surprising comma example --- translations/README-ru.md | 71 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/translations/README-ru.md b/translations/README-ru.md index b5627b6..c191aff 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1177,3 +1177,74 @@ CPython 3.7 [решил эту проблему](https://bugs.python.org/issue26 приведенные здесь фрагменты не затронуты и по-прежнему генерируют методы :) --- + + +### ▶ All-true-ation (непереводимая игра слов) * + + +```py +>>> all([True, True, True]) +True +>>> all([True, True, False]) +False + +>>> all([]) +True +>>> all([[]]) +False +>>> all([[[]]]) +True +``` + +Почему это изменение True-False? + +#### 💡 Объяснение: + +- Реализация функции `all`: + +- ```py + def all(iterable): + for element in iterable: + if not element: + return False + return True + ``` + +- `all([])` возвращает `True`, поскольку итерируемый массив пуст. +- `all([[]])` возвращает `False`, поскольку переданный массив имеет один элемент, `[]`, а в python пустой список является ложным. +- `all([[[[]]])` и более высокие рекурсивные варианты всегда `True`. Это происходит потому, что единственный элемент переданного массива (`[[...]]`) уже не пуст, а списки со значениями являются истинными. + +--- + + +### ▶ Неожиданная запятая + +**Вывод (< 3.6):** + +```py +>>> def f(x, y,): +... print(x, y) +... +>>> def g(x=4, y=5,): +... print(x, y) +... +>>> def h(x, **kwargs,): + File "", line 1 + def h(x, **kwargs,): + ^ +SyntaxError: invalid syntax + +>>> def h(*args,): + File "", line 1 + def h(*args,): + ^ +SyntaxError: invalid syntax +``` + +#### 💡 Объяснение: + +- Запятая в конце списка аргументов функции Python не всегда законна. +- В Python список аргументов определяется частично с помощью ведущих запятых, а частично с помощью запятых в конце списка. Этот конфликт приводит к ситуациям, когда запятая оказывается в середине, и ни одно из правил не выполняется. +- **Примечание:** Проблема с запятыми в конце списка аргументов [исправлена в Python 3.6](https://bugs.python.org/issue9232). Варианты использования запятых в конце выражения приведены в [обсуждении](https://bugs.python.org/issue9232#msg248399). + +---