Нет абсолютно никакой разницы, если предположить, что (как показывают ваши теги) вы используете Python 3.x или более поздней версии. Под CPython все три выражения компилируются в один и тот же байт-код. Вы можете легко убедиться в этом, используя модуль dis
.
Вот вывод dis.dis
для каждого из трех выражений на моем компьютере в Python 3.8+0,0;вы можете видеть, что он является байтовым и идентичным и что константа была предварительно вычислена в каждом случае.
>>> import dis
>>> dis.dis("keras.preprocessing.image.ImageDataGenerator(rescale=1/255)")
1 0 LOAD_NAME 0 (keras)
2 LOAD_ATTR 1 (preprocessing)
4 LOAD_ATTR 2 (image)
6 LOAD_ATTR 3 (ImageDataGenerator)
8 LOAD_CONST 0 (0.00392156862745098)
10 LOAD_CONST 1 (('rescale',))
12 CALL_FUNCTION_KW 1
14 RETURN_VALUE
>>> dis.dis("keras.preprocessing.image.ImageDataGenerator(rescale=1./255)")
1 0 LOAD_NAME 0 (keras)
2 LOAD_ATTR 1 (preprocessing)
4 LOAD_ATTR 2 (image)
6 LOAD_ATTR 3 (ImageDataGenerator)
8 LOAD_CONST 0 (0.00392156862745098)
10 LOAD_CONST 1 (('rescale',))
12 CALL_FUNCTION_KW 1
14 RETURN_VALUE
>>> dis.dis("keras.preprocessing.image.ImageDataGenerator(rescale=1/255.)")
1 0 LOAD_NAME 0 (keras)
2 LOAD_ATTR 1 (preprocessing)
4 LOAD_ATTR 2 (image)
6 LOAD_ATTR 3 (ImageDataGenerator)
8 LOAD_CONST 0 (0.00392156862745098)
10 LOAD_CONST 1 (('rescale',))
12 CALL_FUNCTION_KW 1
14 RETURN_VALUE
Более подробно: в CPython для первой константы 1/255
мывыполняя истинное деление целых чисел, и вычисляется ближайший к истинному значению фактического значения. Во втором случае, 1./255
, числитель уже равен float
, и знаменатель сначала неявно преобразуется в float
, а затем вычисляется частное. Но поскольку знаменатель представляет собой малое целое число, преобразование в float
является точным, и поэтому мы снова вычисляем ближайший представимый тип float до точного частного 1/255
. Третий случай аналогичен, но в данном случае это числитель, который неявно преобразуется в float
, опять же точно, и поэтому вычисленная константа снова является наиболее близким представимым float
к точному частному. Короче говоря, константа одинакова во всех трех случаях.
Таким образом, все три версии имеют одинаковую семантику и производительность. Вы должны использовать то, что кажется вам наиболее читаемым. Для меня это первая версия.