Форматирование строки Python и нечетность умножения строки

StackOverflow https://stackoverflow.com/questions/1309737

Вопрос

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

>>> print('%d' % 2 * 4)
2222
>>> print('%d' % (2 * 4))
8

Даже принуждение типа к целочисленному делу ничего не делает. (Я понимаю, что это избыточно, но это проверка идиота для меня:

 >>> print('%d' % int(2) * int(4))
 2222

Очевидно, я решил свою проблему (добавление скобки делает это), но что здесь происходит? Если это просто причуда, которую я должен помнить, это нормально, но я бы предпочел понять логику, стоящую за этим.

Это было полезно?

Решение

Вы испытываете приоритет оператора.

В Python % имеет такой же приоритет, как и * Поэтому они группируют слева направо.

Так,

print('%d' % 2 * 4)

такой же как,

print( ('%d' % 2) * 4)

Вот Python Таблица предложения оператора.

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

Другие советы

Ах, я думаю, я понял это. Сразу после того, как я разместил сообщение, конечно. Это порядок работы. Форматирование строки рассчитывается, и полученная строка размножается в последнем операнде.

Когда я набираю:

>>> print '%d' % 2 * 4
2222

Оказывается, как будто я указал приоритет таким образом:

>>> print ('%d' % 2) * 4
2222
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top