mirror of
https://github.com/satwikkansal/wtfpython
synced 2024-11-22 02:54:25 +01:00
Translate Nan-reflexivity example
This commit is contained in:
parent
51d13b87cf
commit
495c840254
75
translations/README-ru.md
vendored
75
translations/README-ru.md
vendored
@ -1610,3 +1610,78 @@ def some_func(x):
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
|
||||
### ▶ Nan-рефлексивность *
|
||||
|
||||
<!-- Example ID: 59bee91a-36e0-47a4-8c7d-aa89bf1d3976 --->
|
||||
|
||||
1\.
|
||||
|
||||
```py
|
||||
a = float('inf')
|
||||
b = float('nan')
|
||||
c = float('-iNf') # Эти строки не чувствительны к регистру
|
||||
d = float('nan')
|
||||
```
|
||||
|
||||
**Результат:**
|
||||
|
||||
```py
|
||||
>>> a
|
||||
inf
|
||||
>>> b
|
||||
nan
|
||||
>>> c
|
||||
-inf
|
||||
>>> float('some_other_string')
|
||||
ValueError: could not convert string to float: some_other_string
|
||||
>>> a == -c # inf==inf
|
||||
True
|
||||
>>> None == None # None == None
|
||||
True
|
||||
>>> b == d # но nan!=nan
|
||||
False
|
||||
>>> 50 / a
|
||||
0.0
|
||||
>>> a / a
|
||||
nan
|
||||
>>> 23 + b
|
||||
nan
|
||||
```
|
||||
|
||||
2\.
|
||||
|
||||
```py
|
||||
>>> x = float('nan')
|
||||
>>> y = x / x
|
||||
>>> y is y # идендичность сохраняется
|
||||
True
|
||||
>>> y == y # сравнение ложно для y
|
||||
False
|
||||
>>> [y] == [y] # но сравнение истинно для списка, содержащего y
|
||||
True
|
||||
```
|
||||
|
||||
#### 💡 Объяснение:
|
||||
|
||||
- `'inf'` и `'nan'` - это специальные строки (без учета регистра), которые при явном приведении к типу `float` используются для представления математической "бесконечности" и "не число" соответственно.
|
||||
|
||||
- Согласно стандартам IEEE `NaN != NaN`, но соблюдение этого правила нарушает предположение о рефлексивности элемента коллекции в Python, то есть если `x` является частью коллекции, такой как `list`, реализации, методы сравнения предполагают, что `x == x`. Поэтому при сравнении элементов сначала сравниваются их идентификаторы (так как это быстрее), а значения сравниваются только при несовпадении идентификаторов. Следующий фрагмент сделает вещи более ясными:
|
||||
|
||||
```py
|
||||
>>> x = float('nan')
|
||||
>>> x == x, [x] == [x]
|
||||
(False, True)
|
||||
>>> y = float('nan')
|
||||
>>> y == y, [y] == [y]
|
||||
(False, True)
|
||||
>>> x == y, [x] == [y]
|
||||
(False, False)
|
||||
```
|
||||
|
||||
Поскольку идентификаторы `x` и `y` разные, рассматриваются значения, которые также различаются; следовательно, на этот раз сравнение возвращает `False`.
|
||||
|
||||
- Интересное чтение: [Рефлексивность и другие основы цивилизации](https://bertrandmeyer.com/2010/02/06/reflexivity-and-other-pillars-of-civilization/)
|
||||
|
||||
---
|
||||
|
Loading…
Reference in New Issue
Block a user