Hľadám minimálne a maximálne hodnoty pre celé čísla v jazyku python. Napríklad v Jave máme Integer.MIN_VALUE
a Integer.MAX_VALUE
. Existuje niečo podobné v jazyku python?
V Pythone 3 táto otázka neplatí. Jednoduchý typ int
je neohraničený.
V skutočnosti však môžete hľadať strojovú'veľkosť word size. Tá je v Pythone 3 stále k dispozícii ako sys.maxsize
.
V Pythone 2 je maximálna hodnota pre obyčajné hodnoty int
k dispozícii ako sys.maxint
:
>>> sys.maxint
9223372036854775807
Minimálnu hodnotu môžete vypočítať pomocou -sys.maxint - 1
, ako je uvedené tu.
Python po prekročení tejto hodnoty plynule prepne z obyčajných na dlhé celé čísla. Takže vo väčšine prípadov ju nebudete potrebovať poznať.
Konštanta sys.maxint bola od verzie Python 3.0 odstránená, namiesto nej používajte sys.maxsize
Integers
- PEP 237: V podstate sa long premenoval na int. To znamená, že existuje len jeden zabudovaný integrálny typ s názvom int; ale správa sa väčšinou ako starý typ long.
- PEP 238: Výraz ako 1/2 vracia float. Na získanie správania pri skracovaní použite 1//2. (Druhá syntax existuje už roky, na aspoň od Pythonu 2.2.)
- Konštanta sys.maxint bola odstránená, pretože už neexistuje limit pre hodnotu celých čísel. Avšak sys.maxsize sa môže používať ako celé číslo väčšie ako akýkoľvek praktický index zoznamu alebo reťazca. Je v súlade s prirodzenej" veľkosti celého čísla v implementácii a zvyčajne je rovnaká ako sys.maxint v predchádzajúcich verziách na rovnakej platforme (za predpokladu, že rovnaké možnosti zostavenia).
- Repr() dlhého celého čísla už neobsahuje koncové L, takže kód, ktorý tento znak bezpodmienečne odstraňuje, odreže poslednú číslicu namiesto toho. (Namiesto toho použite str().)
- Oktalové literály už nemajú tvar 0720; namiesto toho používajte 0o720.
V jazyku Python sa celé čísla automaticky prepnú z reprezentácie int
s pevnou veľkosťou na reprezentáciu s premenlivou šírkou long
, keď odovzdáte hodnotu sys.maxint
, ktorá je buď 231 - 1 alebo 263 - 1 v závislosti od vašej platformy. Všimnite si, že sa tu pridáva znak L
:
>>> 9223372036854775807
9223372036854775807
>>> 9223372036854775808
9223372036854775808L
Z príručky Python manual:
Čísla sa vytvárajú pomocou numerických literálov alebo ako výsledok vstavaných funkcií a operátorov. Neupravené celočíselné literály (vrátane binárnych, hexadecimálnych a oktálových čísel) poskytujú obyčajné celé čísla, pokiaľ hodnota, ktorú označujú, nie je príliš veľká na to, aby sa dala reprezentovať ako obyčajné celé číslo, v takom prípade poskytujú dlhé celé číslo. Celočíselné literály s príponou 'L'
alebo 'l'
poskytujú dlhé celé čísla (uprednostňuje sa 'L'
, pretože 1l
vyzerá príliš ako jedenásť!).
Python sa veľmi snaží predstierať, že jeho celé čísla sú matematické celé čísla a nie sú ohraničené. Dokáže napríklad ľahko vypočítať googol:
>>> 10**100
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000L