Translate The surprising comma example

This commit is contained in:
Vadim Nifadev 2024-04-22 12:02:32 +03:00
parent 6e246d1487
commit 191ea8343b
1 changed files with 71 additions and 0 deletions

View File

@ -1177,3 +1177,74 @@ CPython 3.7 [решил эту проблему](https://bugs.python.org/issue26
приведенные здесь фрагменты не затронуты и по-прежнему генерируют методы :)
---
### ▶ All-true-ation (непереводимая игра слов) *
<!-- Example ID: dfe6d845-e452-48fe-a2da-0ed3869a8042 -->
```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`. Это происходит потому, что единственный элемент переданного массива (`[[...]]`) уже не пуст, а списки со значениями являются истинными.
---
### ▶ Неожиданная запятая
<!-- Example ID: 31a819c8-ed73-4dcc-84eb-91bedbb51e58 --->
**Вывод (< 3.6):**
```py
>>> def f(x, y,):
... print(x, y)
...
>>> def g(x=4, y=5,):
... print(x, y)
...
>>> def h(x, **kwargs,):
File "<stdin>", line 1
def h(x, **kwargs,):
^
SyntaxError: invalid syntax
>>> def h(*args,):
File "<stdin>", line 1
def h(*args,):
^
SyntaxError: invalid syntax
```
#### 💡 Объяснение:
- Запятая в конце списка аргументов функции Python не всегда законна.
- В Python список аргументов определяется частично с помощью ведущих запятых, а частично с помощью запятых в конце списка. Этот конфликт приводит к ситуациям, когда запятая оказывается в середине, и ни одно из правил не выполняется.
- **Примечание:** Проблема с запятыми в конце списка аргументов [исправлена в Python 3.6](https://bugs.python.org/issue9232). Варианты использования запятых в конце выражения приведены в [обсуждении](https://bugs.python.org/issue9232#msg248399).
---