Обратите внимание, что это не так в Python 3.6:
>>> d = float("nan")
>>> d
nan
>>> c = {"a": 3, d: 4}
>>> c["a"]
3
>>> c[d]
4
Как я понимаю:
d = объект nan c - словарь, который содержит 3, связанных с «а» и «4» связаны с наном, но, поскольку внешний вид Python 3.6 в словарях изменился, теперь он сравнивает два указателя, и если они указывают на один и тот же объект, они считают, что это равенство сохраняется.
Это означает, что хотя:
>>> d == d
False
Из-за того, как IEEE754 указывает, что NAN не равен самому себе, при поиске словаря сначала учитываются указатели и потому, что они указывают на тот же nan-объект, который он возвращает 4.
Обратите также внимание на то, что:
>>> e = float("nan")
>>> e == d
False
>>> c[e]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: nan
>>> c[d]
4
Таким образом, не каждый нанок указывает на 4, поэтому сохраняется какой-то IEEE754. Это было реализовано, потому что соблюдение стандарта, что нан никогда не совпадает с самим собой, снижает эффективность, а не игнорирует стандарт. Именно потому, что вы храните что-то в словаре, к которому вы не можете получить доступ в предыдущих версиях.
Да, вы можете синтезировать свой собственный звук и вернуть его в виде Ssml в аудиотэге: https://developers.google.com/actions/reference/ssml