Python 3'te sys.maxint nedir?


Yanıtlar:


172

Sys.maxint sabiti kaldırıldı, çünkü artık tamsayıların değeri için bir sınır yok. Ancak, sys.maxsize herhangi bir pratik liste veya dize dizininden daha büyük bir tamsayı olarak kullanılabilir. Uygulamanın "doğal" tamsayı boyutuna uygundur ve genellikle aynı platformda önceki sürümlerde sys.maxint ile aynıdır (aynı oluşturma seçeneklerini varsayarak).

http://docs.python.org/3.1/whatsnew/3.0.html#integers


79

Başkaları tarafından belirtildiği gibi, Python 3'lerin intmaksimum boyutu yoktur, ancak sadece başka bir intdeğerden daha yüksek olduğu garanti edilen bir şeye ihtiyacınız varsa, Infinity için şamandıra değerini kullanabilirsiniz float("inf").


Eski Python (2.7) ile de çalışır - olası tüm gerçek değerlerden daha yüksek bir sayı döndürmeniz gerektiğinde doğru cevap budur (örneğin, nesneleri karşılaştırarak liste sıralaması için)
Aaron D

3
Bu yaklaşımın bir dezavantajı, numba veya Cython veya benzeri ile jit derleme uygulamaya çalışıyorsanız, float inf dizilerinin veri türünü bozabilmesidir. Bir jit derleyicisinin otomatik olarak uygun c türüne dönüştürmesi için tüm tamsayı türlerinin bir Python listesine ihtiyacınız olabilir. Bu özellikle, saf bir Python uygulamasından çok daha hızlı hale getirmek için jit araçlarını uygulayabileceğiniz, ancak jit derleyicinin konuşlandırılmış bir ortama yüklenmemiş olması durumunda uygulamayı kolaylık, test etme ve geri dönüş için uygulamayı saf Python'a yazmak istediğiniz klasik algoritmalar için kritik öneme sahiptir. vs
ely

24

Python 3 ints maksimum değildir.

Amacınız Python'la aynı şekilde derlendiğinde C'deki bir int'in maksimum boyutunu belirlemekse, yapı modülünü kullanarak şunları bulabilirsiniz:

>>> import struct
>>> platform_c_maxint = 2 ** (struct.Struct('i').size * 8 - 1) - 1

Python 3 int nesnelerinin dahili uygulama ayrıntılarını merak ediyorsanız, sys.int_infobasamak başına bit ve basamak boyutu ayrıntılarına bakın. Hiçbir normal program bunlarla ilgilenmemelidir.


18

Diğerlerinden daha büyük bir sayı arıyorsanız:

Yöntem 1:

float('inf')

Yöntem 2:

import sys
max = sys.maxsize

Diğerlerinden daha küçük bir sayı arıyorsanız:

Yöntem 1:

float('-inf')

Yöntem 2:

import sys
min = -sys.maxsize - 1

Yöntem 1, hem Python2 hem de Python3'te çalışır. Yöntem 2, Python3'te çalışır. Python2 Yöntem 2 denemedim.


3

Python 3'ün ints keyfi uzunluğa sahip olduğundan Python 3.0 artık sys.maxint'e sahip değil. Sys.maxint yerine sys.maxsize; pozitif boyutta bir maksimum boyut_t aka Py_ssize_t.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.