Jeg leder efter minimums- og maksimumsværdier for hele tal i python. I Java har vi f.eks. Integer.MIN_VALUE
og Integer.MAX_VALUE
. Er der noget lignende i python?
I Python 3 gælder dette spørgsmål ikke. Den almindelige type int
er ubegrænset.
Men du leder måske faktisk efter maskinens ordstørrelse. Det er stadig tilgængeligt i Python 3 som sys.maxsize
.
I Python 2 er den maksimale værdi for almindelige int
-værdier tilgængelig som sys.maxint
:
>>> sys.maxint
9223372036854775807
Du kan beregne minimumsværdien med -sys.maxint - 1
som vist her.
Python skifter problemfrit fra almindelig til lange hele tal, når du overskrider denne værdi. Så det meste af tiden vil du ikke have brug for at kende den.
sys.maxint-konstanten er blevet fjernet fra Python 3.0 og frem, brug i stedet sys.maxsize.
Integers
- PEP 237: I det væsentlige er long omdøbt til int. Det vil sige, at der kun er en indbygget integral type, der hedder int; men den opfører sig for det meste som den gamle long-type.
- PEP 238: Et udtryk som 1/2 returnerer en float. Brug 1//2 for at få den trunkerende opførsel. (Sidstnævnte syntaks har eksisteret i årevis, på mindst siden Python 2.2.)
- Konstanten sys.maxint blev fjernet, da der ikke længere er nogen grænse for værdien af heltal. Dog kan sys.maxsize bruges som en heltal større end ethvert praktisk liste- eller strengindeks. Den er i overensstemmelse med implementeringens "naturlige" heltalsstørrelse og er typisk den samme som som sys.maxint i tidligere udgaver på samme platform (forudsat at den samme opbygningsindstillinger).
- repr() af et langt heltal omfatter ikke længere det afsluttende L, så kode, der ubetinget fjerner dette tegn, vil hugge det sidste ciffer i stedet. (Brug str() i stedet.)
- Oktaalliteraler er ikke længere af formen 0720; brug 0o720 i stedet.
I Python skifter hele tal automatisk fra en int
-repræsentation med fast størrelse til en repræsentation med variabel bredde long
, når du overfører værdien sys.maxint
, som enten er 231 - 1 eller 263 - 1, afhængigt af din platform. Bemærk det L
, der tilføjes her:
>>> 9223372036854775807
9223372036854775807
>>> 9223372036854775808
9223372036854775808L
Fra [Python-manualen] (http://docs.python.org/library/stdtypes.html#typesnumeric):
Tal oprettes af numeriske bogstaver eller som resultat af indbyggede funktioner og operatorer. Uudsmykkede heltalsliteraler (herunder binære, hex- og oktal-tal) giver almindelige heltal, medmindre den værdi, de angiver, er for stor til at blive repræsenteret som et almindeligt heltal, i hvilket tilfælde de giver et langt heltal. Hele talliteraler med et
'L'
eller'l'
-suffiks giver lange hele tal ('L'
er at foretrække, fordi1l
ligner for meget elleve!).
Python prøver meget hårdt at lade som om, at dets heltal er matematiske heltal og er ubegrænsede. Det kan f.eks. uden problemer beregne en googol:
>>> 10**100
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000L