Python String Formattazione e String Moltiplicazione Oddity
-
19-09-2019 - |
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.
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