mirror of
https://github.com/satwikkansal/wtfpython
synced 2024-11-22 11:04: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