В Jinja2, как вы проверяете, является ли переменная неопределенной?

Это известно как Тип Принуждение . Википедия имеет приятный бит об этом:

Неявное преобразование типа, также известное как принуждение, является автоматическим преобразованием типа компилятором. Некоторые языки позволяют или даже требуют, чтобы компиляторы обеспечивали принуждение.

В выражении смешанного типа данные одного или нескольких подтипов могут быть преобразованы в супертип по мере необходимости во время выполнения, чтобы программа работала правильно .

...

Такое поведение следует использовать с осторожностью, так как могут возникнуть непредвиденные последствия. Данные могут быть потеряны, когда представления с плавающей запятой преобразуются в интегральные представления, поскольку дробные компоненты значений с плавающей запятой будут усечены (округлены вниз). И наоборот, преобразование из интегрального представления в плавающую точку также может потерять точность, поскольку тип с плавающей запятой может быть неспособным точно представлять целое число (например, float может быть типом одиночной точности IEEE 754, который не может представлять integer 16777217 точно, в то время как 32-разрядный целочисленный тип может). Это может привести к таким ситуациям, как сохранение одного и того же целочисленного значения в две переменные типа integer и тип real, которые возвращают false, если сравнивать их для равенства.

blockquote>

В случае C и C ++ значение выражения интегральных типов (то есть longs, integers, shorts, chars) является наибольшим интегральным типом в выражении. Я не уверен, но я предполагаю, что что-то подобное происходит (предполагая, что значения с плавающей запятой «больше», чем целые) с выражениями, включающими числа с плавающей запятой.

150
задан Paolo Casciello 29 May 2018 в 11:17
поделиться