Apa itu sys.maxint dalam Python 3?

162

Saya sudah mencoba mencari tahu cara merepresentasikan integer maksimum, dan saya sudah baca untuk menggunakannya "sys.maxint". Namun, dalam Python 3 ketika saya menyebutnya saya mendapatkan:

AttributeError: module 'object' has no attribute 'maxint'
Ci3
sumber
Kemungkinan duplikat dari nilai Maksimum dan Minimum untuk int
Georgy

Jawaban:

172

Konstanta sys.maxint dihapus, karena tidak ada lagi batas nilai integer. Namun, sys.maxsize dapat digunakan sebagai bilangan bulat yang lebih besar daripada daftar praktis atau indeks string. Ini sesuai dengan ukuran integer "alami" implementasi dan biasanya sama dengan sys.maxint dalam rilis sebelumnya pada platform yang sama (dengan asumsi opsi build yang sama).

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

Diego Basch
sumber
79

Seperti yang ditunjukkan oleh orang lain, Python 3 inttidak memiliki ukuran maksimum, tetapi jika Anda hanya membutuhkan sesuatu yang dijamin lebih tinggi dari intnilai lainnya , maka Anda dapat menggunakan nilai float untuk Infinity, yang bisa Anda dapatkan float("inf").

mwfearnley
sumber
Juga berfungsi dengan legacy Python (2.7) - ini adalah jawaban yang benar ketika Anda perlu mengembalikan angka yang lebih tinggi dari semua nilai nyata yang mungkin (misalnya untuk pengurutan daftar dengan membandingkan objek)
Aaron D
3
Salah satu kelemahan dari pendekatan ini adalah float inf dapat merusak tipe data array jika Anda mencoba menerapkan kompilasi jit dengan numba atau Cython atau yang serupa. Anda mungkin memerlukan daftar Python dari semua tipe integer sehingga kompiler jit dapat secara otomatis mengubahnya menjadi tipe c yang sesuai, misalnya. Ini sangat penting untuk algoritma klasik di mana Anda mungkin menerapkan alat jit untuk membuatnya jauh lebih cepat daripada implementasi Python murni, tetapi masih ingin menulis implementasi dalam Python murni untuk kenyamanan, pengujian, mundur jika kompiler jit tidak diinstal di lingkungan yang digunakan , dll.
ely
24

Python int tidak memiliki maksimal.

Jika tujuan Anda adalah untuk menentukan ukuran maksimum sebuah int di C ketika dikompilasi dengan cara yang sama dengan Python, Anda dapat menggunakan modul struct untuk mencari tahu:

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

Jika Anda penasaran dengan detail implementasi internal objek int Python 3, Cari sys.int_infobit per digit dan detail ukuran digit. Tidak ada program normal yang peduli tentang ini.

gps
sumber
18

Jika Anda mencari nomor yang lebih besar dari yang lainnya:

Metode 1:

float('inf')

Metode 2:

import sys
max = sys.maxsize

Jika Anda mencari nomor yang lebih kecil dari yang lainnya:

Metode 1:

float('-inf')

Metode 2:

import sys
min = -sys.maxsize - 1

Metode 1 bekerja di Python2 dan Python3. Metode 2 bekerja di Python3. Saya belum mencoba Metode 2 di Python2.

Vikrant
sumber
3

Python 3.0 tidak memiliki sys.maxint lagi karena int Python 3 panjangnya sewenang-wenang. Alih-alih sys.maxint memiliki sys.maxsize; ukuran maksimum size_t berukuran positif alias Py_ssize_t.

Cookiesfly
sumber
0

Alternatifnya adalah

import math

... math.inf ...
Tom Verhoeff
sumber