2016-07-01 29 views
15

C'è un modo per raggruppare cifre in un codice Python per aumentare la leggibilità del codice? Ho provato ' e _ che sono digit separators di alcune altre lingue, ma inutilmente.Separatori di cifre in codice Python

Un operatore strano che concatena il lato sinistro con il lato destro potrebbe anche funzionare.

+0

può essere più specifico .. fare un esempio? –

+2

Penso che voglia sostituire il numero intero letterale 31415926 con 31_415_926, ad esempio. – Prune

+0

Non sono sicuro che sia implementato. Ci sono proposte, ma non implementazioni – Li357

risposta

16

Aggiornamento alcuni anni dopo: Python 3.6 ora supporta PEP515 e quindi è possibile utilizzare _ per il miglioramento letterale letterale float e intero.

Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 1_1000 
11000 
>>> 

Per riferimento storico, si può guardare l'analisi lessicale per le definizioni rigorose python2.7, python3.5 ...

Per python3.6.0a2 e versioni precedenti, si dovrebbe ottenere un messaggio di errore simile a:

Python 3.6.0a2 (v3.6.0a2:378893423552, Jun 13 2016, 14:44:21) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 1_000 
    File "<stdin>", line 1 
    1_000 
     ^
SyntaxError: invalid syntax 
>>> amount = 10_000_000.0 
    File "<stdin>", line 1 
    amount = 10_000_000.0 
        ^
SyntaxError: invalid syntax 
3

Non esiste tale funzione in Python ma è stato proposto di integrarlo in futuro.

È possibile visualizzare la proposta nello PEP515.

2

La cosa più vicina che ho visto in python è 12 * 1000 * 1000, che non è l'ideale, ma può essere utile se è necessario 12000000. Comunque sia, se in C, sono equivalenti, poiché in fase di compilazione converte entrambi nella stessa cosa, Python potrebbe non condividere questa ottimizzazione.

+1

Se sono letterali, python folderà le costanti. Però non farà alcuna piegatura di simboli. – mgilson

+0

Grazie. Pensavo che sarebbe successo, ma non volevo diffondere cattive informazioni. – TemporalWolf

+2

Per 12 milioni, userei e raccomanderei '12e6'. – ThoAppelsin

4

Attualmente non v'è alcun separatore delle migliaia in Python, ma è possibile utilizzare il modulo locale per convertire stringa con questi separatori ad un int:

import locale 
locale.setlocale(locale.LC_ALL, '') 
locale.atoi("1,000,000")