Domanda

Python sta facendo moltiplicazione stringa in cui mi aspetterei che faccia la moltiplicazione numerica, e io non so perché.

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

Anche ad impostare il tipo a intero non fa nulla. (Mi rendo conto che è ridondante, ma è un idiota-check per me:

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

Ovviamente ho risolto il mio problema (aggiungendo la parentesi lo fa), ma quello che sta succedendo qui? Se questo è solo un capriccio devo ricordare, che va bene, ma io preferirei capire la logica alla base di questo.

È stato utile?

Soluzione

Si verificano precedenza degli operatori .

In Python % ha la stessa precedenza * in modo che di gruppo da sinistra a destra.

print('%d' % 2 * 4)

è lo stesso,

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

Ecco il pitone operatore tabella delle precedenze .

Dal momento che è difficile ricordare le regole di precedenza dell'operatore, e le regole può essere sottile, spesso è meglio usare semplicemente le parentesi esplicito quando concatenamento più operatori in un'espressione.

Altri suggerimenti

Ah, credo di aver capito. Subito dopo ho postato il messaggio, naturalmente. E 'una cosa fine-di-operazioni. La formattazione della stringa viene calcolato, e la stringa risultante viene moltiplicato stringa contro l'ultimo operando.

Quando digito:

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

Si scopre di essere come se avessi specificato la precedenza in questo modo:

>>> print ('%d' % 2) * 4
2222
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top