Библиотеки, такие как Tensorflow, sympy, SQLAlchemy и другие, используют функцию «перегрузки операторов» Python, то есть для специализированных объектов, определенных в этих библиотеках, операторы сравнения, такие как "==,>, <, ! = "- фактически все остальные математические операторы -" +, -, *, / "и другие, которые являются словами, а не символами, такими как" in, not ", - являются специализированными, так что код, определенный в библиотеке, является вызывается при обнаружении оператора. </p>
Это позволяет библиотекам расширять поведение оператора. Дело в том, что некоторые из этих «операторов», которые синтаксически ведут себя так же, как и другие, не запускают и не могут запускать какой-либо пользовательский код - их поведение одинаково для всех объектов, и, когда кто-то задумывается об этом, они будут иначе не имеет смысла. Три таких оператора: «и, или, равно ».
В случае is
, Python используйте его исключительно для сравнения идентификаторов - если объект слева является то же самое (и это подразумевает нахождение в той же ячейке памяти), что и объект справа.
Итак, если, как вы говорите, «flag
- это тензор», он никогда не будет объектом True
(который является синглтоном). И нет ничего, что может добавить тензорный поток в код для класса Tensor для изменения этого поведения.
С другой стороны, оператор ==
заставит Python вызвать метод __eq__
для класса объектов, который может выполнять все виды операций.