Sys.maxint trong Python 3 là gì?


Câu trả lời:


171

Hằng số sys.maxint đã bị xóa, vì không còn giới hạn giá trị của các số nguyên. Tuy nhiên, sys.maxsize có thể được sử dụng như một số nguyên lớn hơn bất kỳ danh sách thực tế hoặc chỉ mục chuỗi nào. Nó phù hợp với kích thước số nguyên tự nhiên của nhóm triển khai và thường giống như sys.maxint trong các bản phát hành trước đó trên cùng một nền tảng (giả sử các tùy chọn xây dựng giống nhau).

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


79

Như những người khác đã chỉ ra, Python 3 intkhông có kích thước tối đa, nhưng nếu bạn chỉ cần thứ gì đó được đảm bảo cao hơn bất kỳ intgiá trị nào khác , thì bạn có thể sử dụng giá trị float cho Infinity mà bạn có thể nhận được float("inf").


Cũng hoạt động với Python kế thừa (2.7) - đây là câu trả lời đúng khi bạn cần trả về một số cao hơn tất cả các giá trị thực có thể (ví dụ: để sắp xếp danh sách bằng cách so sánh các đối tượng)
Aaron D

3
Một nhược điểm của phương pháp này là float inf có thể phá hỏng kiểu dữ liệu của mảng nếu bạn đang cố gắng áp dụng biên dịch jit với numba hoặc Cython hoặc tương tự. Bạn có thể cần một danh sách Python gồm tất cả các loại số nguyên để trình biên dịch jit có thể tự động chuyển đổi nó thành loại c thích hợp. Điều này đặc biệt quan trọng đối với các thuật toán cổ điển nơi bạn có thể áp dụng các công cụ jit để làm cho chúng nhanh hơn nhiều so với triển khai Python thuần túy, nhưng vẫn muốn viết triển khai trong Python thuần để thuận tiện, kiểm tra, dự phòng nếu trình biên dịch jit không được cài đặt trong môi trường được triển khai , v.v.
ely

24

Python 3 ints không có tối đa.

Nếu mục đích của bạn là xác định kích thước tối đa của một int trong C khi được biên dịch giống như Python, bạn có thể sử dụng mô đun struct để tìm hiểu:

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

Nếu bạn tò mò về các chi tiết triển khai bên trong của các đối tượng int của Python 3, hãy xem sys.int_infocác bit trên mỗi chữ số và chi tiết kích thước chữ số. Không có chương trình bình thường nên quan tâm về những điều này.


18

Nếu bạn đang tìm kiếm một số lớn hơn tất cả những người khác:

Cách 1:

float('inf')

Cách 2:

import sys
max = sys.maxsize

Nếu bạn đang tìm kiếm một số nhỏ hơn tất cả những người khác:

Cách 1:

float('-inf')

Cách 2:

import sys
min = -sys.maxsize - 1

Phương thức 1 hoạt động trong cả Python2 và Python3. Phương pháp 2 hoạt động trong Python3. Tôi chưa thử Phương pháp 2 trong Python2.


3

Python 3.0 không có sys.maxint nữa vì ints của Python 3 có độ dài tùy ý. Thay vì sys.maxint, nó có sys.maxsize; kích thước tối đa của size_t kích thước dương hay còn gọi là Py_ssize_t.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.