Translate What's wrong with booleans? example

This commit is contained in:
Vadim Nifadev 2024-04-22 13:58:11 +03:00
parent 8a1536986f
commit a0069d842e
1 changed files with 90 additions and 0 deletions

View File

@ -1350,3 +1350,93 @@ SyntaxError: EOF while scanning triple-quoted string literal
+ `'''` и `"""` также являются разделителями строк в Python, что вызывает SyntaxError, поскольку интерпретатор Python ожидал завершающую тройную кавычку в качестве разделителя при сканировании текущего встреченного строкового литерала с тройной кавычкой.
---
### ▶ Что не так с логическими значениями?
<!-- Example ID: 0bba5fa7-9e6d-4cd2-8b94-952d061af5dd --->
1\.
```py
# Простой пример счетчика логических переменных и целых чисел
# в итерируемом объекте со значениями разных типов данных
mixed_list = [False, 1.0, "some_string", 3, True, [], False]
integers_found_so_far = 0
booleans_found_so_far = 0
for item in mixed_list:
if isinstance(item, int):
integers_found_so_far += 1
elif isinstance(item, bool):
booleans_found_so_far += 1
```
**Результат:**
```py
>>> integers_found_so_far
4
>>> booleans_found_so_far
0
```
2\.
```py
>>> some_bool = True
>>> "wtf" * some_bool
'wtf'
>>> some_bool = False
>>> "wtf" * some_bool
''
```
3\.
```py
def tell_truth():
True = False
if True == False:
print("I have lost faith in truth!")
```
**Результат (< 3.x):**
```py
>>> tell_truth()
I have lost faith in truth!
```
#### 💡 Объяснение:
* `bool` это подкласс класса `int` в Python
```py
>>> issubclass(bool, int)
True
>>> issubclass(int, bool)
False
```
* `True` и `False` - экземпляры класса `int`
```py
>>> isinstance(True, int)
True
>>> isinstance(False, int)
True
```
* Целочисленное значение `True` равно `1`, а `False` равно `0`.
```py
>>> int(True)
1
>>> int(False)
0
```
* Объяснение на [StackOverflow](https://stackoverflow.com/a/8169049/4354153).
* Изначально в Python не было типа `bool` (использовали 0 для false и ненулевое значение 1 для true). В версиях 2.x были добавлены `True`, `False` и тип `bool`, но для обратной совместимости `True` и `False` нельзя было сделать константами. Они просто были встроенными переменными, и их можно было переназначить.
* Python 3 был несовместим с предыдущими версиями, эту проблему наконец-то исправили, и поэтому последний фрагмент не будет работать с Python 3.x!
---