sys.maxint ใน Python 3 คืออะไร


162

"sys.maxint"ฉันได้รับการพยายามที่จะหาวิธีที่จะเป็นตัวแทนของจำนวนเต็มสูงสุดและฉันได้อ่านกับการใช้งาน อย่างไรก็ตามใน Python 3 เมื่อฉันเรียกว่าฉันจะได้รับ:

AttributeError: module 'object' has no attribute 'maxint'

เป็นไปได้ที่ซ้ำกันของค่าสูงสุดและต่ำสุดสำหรับ ints
Georgy

คำตอบ:


172

ค่าคงที่ sys.maxint ถูกลบเนื่องจากไม่มีการ จำกัด ค่าของจำนวนเต็มอีกต่อไป อย่างไรก็ตาม sys.maxsize สามารถใช้เป็นจำนวนเต็มขนาดใหญ่กว่ารายการที่ใช้งานได้จริงหรือดัชนีสตริง มันสอดคล้องกับขนาดจำนวนเต็ม“ ธรรมชาติ” ของการใช้งานและโดยทั่วไปจะเหมือนกับ sys.maxint ในรีลีสก่อนหน้าบนแพลตฟอร์มเดียวกัน (สมมติว่าเป็นตัวเลือกบิลด์เดียวกัน)

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


79

ในฐานะที่เป็นออกแหลมโดยคนอื่น, Python 3 intไม่ได้มีขนาดสูงสุด แต่ถ้าคุณเพียงแค่ต้องการสิ่งที่รับประกันว่าจะสูงกว่าที่อื่น ๆค่าแล้วคุณสามารถใช้ค่าลอยสำหรับอินฟินิตี้ซึ่งคุณจะได้รับด้วยintfloat("inf")


ใช้งานได้กับ Legacy Python (2.7) - นี่เป็นคำตอบที่ถูกต้องเมื่อคุณต้องการส่งคืนจำนวนที่สูงกว่าค่าจริงที่เป็นไปได้ทั้งหมด (เช่นสำหรับการเรียงลำดับรายการโดยการเปรียบเทียบวัตถุ)
Aaron D

3
ข้อเสียข้อหนึ่งของวิธีการนี้คือ float inf สามารถทำลายประเภทข้อมูลของอาร์เรย์ได้หากคุณพยายามใช้การรวบรวม jit กับ numba หรือ Cython หรือที่คล้ายกัน คุณอาจต้องการรายการ Python ของชนิดจำนวนเต็มทั้งหมดเพื่อให้คอมไพเลอร์ jit สามารถแปลงเป็นประเภท c ที่เหมาะสมโดยอัตโนมัติ นี่เป็นสิ่งสำคัญอย่างยิ่งสำหรับอัลกอริทึมแบบดั้งเดิมที่คุณอาจใช้เครื่องมือ jit เพื่อทำให้เร็วกว่าการใช้ Python อย่างบริสุทธิ์ แต่ยังคงต้องการเขียนการใช้งานใน Python บริสุทธิ์เพื่อความสะดวกการทดสอบทางเลือกหากคอมไพเลอร์ jit ไม่ได้ติดตั้งในสภาพแวดล้อม ฯลฯ
ely

24

Python 3 ints ไม่มีค่าสูงสุด

หากจุดประสงค์ของคุณคือกำหนดขนาดสูงสุดของ int ใน C เมื่อรวบรวมแบบเดียวกับ Python คุณสามารถใช้โมดูล struct เพื่อค้นหา:

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

หากคุณสงสัยเกี่ยวกับรายละเอียดการใช้งานภายในของออบเจ็กต์ Int ของ Python 3 ให้ดูsys.int_infoบิตต่อหลักและรายละเอียดขนาดหลัก ไม่มีโปรแกรมปกติที่ควรใส่ใจกับสิ่งเหล่านี้


18

หากคุณกำลังมองหาหมายเลขที่มากกว่าหมายเลขอื่น:

วิธีที่ 1:

float('inf')

วิธีที่ 2:

import sys
max = sys.maxsize

หากคุณกำลังมองหาหมายเลขที่เล็กกว่าคนอื่น ๆ :

วิธีที่ 1:

float('-inf')

วิธีที่ 2:

import sys
min = -sys.maxsize - 1

วิธีที่ 1 ทำงานได้ทั้งใน Python2 และ Python3 วิธีที่ 2 ทำงานใน Python3 ฉันไม่ได้ลองวิธีที่ 2 ใน Python2


3

Python 3.0 ไม่มี sys.maxint อีกต่อไปเนื่องจาก int ของ Python 3 มีความยาวตามอำเภอใจ แทนที่จะเป็น sys.maxint จะมี sys.maxsize ขนาดสูงสุดของขนาดที่เป็นค่าบวก size_t aka Py_ssize_t


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.