翼度科技»论坛 编程开发 python 查看内容

Python教程:sys模块中maxsize()的方法

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
在Python中,sys模块有一个名为maxsize()的方法。这个方法返回一个变量Py_ssize_t可以容纳的最大值。
Py_ssize_t是一个整数,它给出了变量可以取的最大值。大小因操作系统的位而异。
32位的大小为(2 power 31)-1,64位的大小为(2 power 63)-1。
sys.maxsize 方法
  1. sys.maxsize()
复制代码
返回:此方法根据平台类型返回最大大小值Py_ssize_t。
代码1:使用 sys.maxsize() 方法

要实现方法sys.maxsize()并检查最大大小值,我们可以导入sys模块并使用方法maxsize()。根据平台架构类型,sys.maxsize()方法在控制台上返回其最大值大小。
下面是32位和64位操作系统的实现,并运行相同的sys.maxsize()方法。
32-Bit平台
  1. # import the sys module to use the maxsize() method
  2. import sys
  3. # returns the maximum size
  4. size = sys.maxsize
  5. print("The maximum size of a 32-bit platform is:" , size)
  6. #输出:
  7. The maximum size of a 32-bit platform is: 2147483647
复制代码
64-Bit平台
  1. import sys
  2. # returns the maximum size
  3. size = sys.maxsize
  4. print("The maximum size of a 32-bit platform is:" , size)
  5. #输出:
  6. The maximum size of a 64-bit platform is: 9223372036854775807
复制代码
代码2:检查列表的最大大小 sys.maxsize() 方法

为了检查我们系统的最大大小,我们可以使用range()方法来传递列表的最大大小,然后检查它的长度。类似地,在第二个例子中,我们超过了最大大小,Python解释器捕获了异常并返回int too large to convert to C ssize_t错误。
在下面的例子中,我们可以观察到对Py_ssize_t设置限制的效果。不可能索引一个元素大于其大小的列表,因为它不接受非Py_ssize_t。
关于字典数据结构,Py_ssize_t使用哈希,因为Python没有使用LinkedList来实现它。类似地,字典中的大小不能大于Py_ssize_t的大小。
最大尺寸
  1. import sys
  2. size = sys.maxsize
  3. # creates the max length
  4. list = range(size)
  5. # returns the length of a list
  6. print("The maximum length of a list:" , len(list))
  7. print("List is created successfully")
  8. #输出:
  9. # maximum size limit on a 64-bit platform
  10. The maximum length of a list: 9223372036854775807
  11. List is created successfully
复制代码
大于最大大小
  1. import sys
  2. size = sys.maxsize
  3. # handles the exception
  4. try:
  5.     # creates a list with maximum size + 1
  6.     list = range(size + 1)
  7.     # check the maximum size
  8.     print(len(list))
  9.     print("List is created successfully")
  10. # exception if the size goes beyond the maximum size
  11. except Exception as exception:
  12.     print("Exception caught: ", exception)
  13.     print("List is not created due to above exception")
  14. #Python小白学习交流群:711312441
  15. #输出:
  16. # output shows exception occurs
  17. Exception caught:  Python int too large to convert to C ssize_t
  18. List is not created due to above exception
复制代码
代码3:该 sys.maxsize() 对比 sys.maxint 方法

sys.maxint()方法不再支持Python 3作为整数。如果我们使用这个方法或常量,我们将得到下面的AttributeError: module 'sys' has no attribute 'maxint'。
为了在Python 3.0中克服这个问题,引入了另一个常量sys.maxsize,我们知道它会返回Py_ssize_t的最大值。在Python 3中,int和long int是合并的。
第一个实现展示了AttributeError的示例,第二个源代码揭示了对maxint的更好理解。
属性错误
  1. import sys
  2. li = [20, 2, 23, 88, 3, 63, 12]
  3. # sys.maxint is not supported in python 3. We need to use python version < 3.0
  4. min_value = sys.maxint
  5. for i in range(0, len(li)):
  6.     if li[i] < min_value:
  7.         min_value = li[i]
  8. print("Min value : " + str(min_value))
  9. 输出:
  10. AttributeError: module 'sys' has no attribute 'maxint'
复制代码
maxint 执行
  1. import sys
  2. max_int = sys.maxsize
  3. min_int = sys.maxsize - 1
  4. long_int = sys.maxsize + 1
  5. print("Maximum integer size is : " + str(max_int)+" , "+str(type(max_int)))
  6. print("Maximum integer size-1 is :" + str(max_int)+" , "+str(type(min_int)))
  7. print("Maximum integer size+1 is :" + str(max_int)+" , "+str(type(long_int)))
  8. #输出:
  9. Maximum integer size is : 9223372036854775807 , <class 'int'>
  10. Maximum integer size-1 is :9223372036854775807 , <class 'int'>
  11. Maximum integer size+1 is :9223372036854775807 , <class 'int'>
复制代码
代码4:在Python中使用 csv.field_size_limit(sys.maxsize)

在Python中,当我们读取包含巨大字段的CSV文件时,它可能会抛出一个异常,说_csv.Error: field larger than field limit。适当的解决方案是不要跳过一些字段及其行。
要分析CSV,我们需要增加field_size_limit。为此,我们需要实现以下源代码。
  1. import sys
  2. # to use the field_size_limit method
  3. import csv
  4. maximum_Integer = sys.maxsize
  5. while True:
  6.     # read the csv with huge fields
  7.     with open('myfile.csv', newline='') as f:
  8.     reader = csv.reader(f)
  9.     for row in reader:
  10.         print(row)
  11.     # Here, we reduce the size if there is an overflow error
  12.     try:
  13.         csv.field_size_limit(maximum_Integer)
  14.         break
  15.     except OverflowError:
  16.         maximum_Integer = int(maximum_Integer/10)
复制代码
来源:https://www.cnblogs.com/xxpythonxx/p/17670245.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具