python之数字的知识点小结

python中的数字是不可变对象,有整形(int)、浮点型(float)、复数(complex)、布尔型(bool)。

整形

  • 小数字池:范围是-5至256,当数值在这个范围内时解释器不需要新建对象,而是直接把缓存中该数值对应的id赋给变量。

    # 在repl环境中测试下列代码
    >>> a=255
    >>> b=255
    >>> print(id(a),id(b))  # -5至256范围内
    out:
    140728491521632 140728491521632  # a和b的id相同
    >>> a=257
    >>> b=257
    >>> print(id(a),id(b))  # -5至256范围外
    out:
    2083422435600 2083422435632  # a和b的id不同
  • 值的范围:python中整形不区分短整形、整形、长整形,解释器会根据数字的大小动态分配存储空间,值的范围只受限于内存大小。

    import sys
    
    a = 1000
    b = 999999999999999999999
    c = b**2
    print(sys.getsizeof(a))
    print(sys.getsizeof(b))
    print(sys.getsizeof(c))
    
    out:
    28
    36
    44

浮点型

内存消耗:python中浮点型相当于其他编程语言的双精度浮点型,占用内存空间固定为24字节。python中无单精度浮点型。

import sys

a = 9999999999999999999999999999999999999999999.99999999988888888
b = 0.1
print(sys.getsizeof(a), sys.getsizeof(b))

out:
24

值的范围:关于浮点型值的范围可以用用如下方式查看。

import sys

print(sys.float_info)

out:
sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)

复数

python中的复数与数学中的复数概念完全相同。实际编程中很少用到,只有在极少数需要科学计算的场合才会用到。在此就不赘述了。

布尔

python的布尔型非常特殊,需要着重梳理。布尔是逻辑判断,判断结果只有2种:

  • True:表示真。

  • 字符串、元组、列表、字典、集合、类的实例等,值不为空判定为True。
  • 整形、浮点型、复数,值不为0即判定为True。
  • False:表示假。

  • 字符串、元组、列表、字典、集合、类的实例等,值为空判定为True。
  • 整形、浮点型、复数,值为0即判定为False。
  • None,判定为False。None是没有的意思,即值的没有确定、类型也没有确定。要分清楚None和空的区别:None表示值未分配和类型也未确定,而空表示值未分配但类型已确定。

python的布尔判定设定非常特殊,熟练掌握以后可以写出非常简洁的代码。以下我举个简洁实用的代码实例。

# 删除列表中开头是'a'的元素
list1 = ['aa', 'adc', 'bb', 'cc', 'aa', 'abc', 'dd']
length = len(list1)
while length:  # 效果等价于while length==0
    if list1[length - 1][0] == 'a':
        del list1[length - 1]
    length -= 1
print(list1)

out:
['bb', 'cc', 'dd']
# 检查序列是否有重复记录,并告知重复了几条记录。
list1 = [1, 1, 2, 3, 4, 5]
list2 = [1, 2, 3, 4, 5, 6]

check_repeat = lambda x: len(x) - len(set(x))  # 输入序列,返回序列原长度与去重后长度的差

if repeat_num := check_repeat(list1):  # 等价于check_repeat(list1)>0
    print(list1, f'有{repeat_num}条重复记录' )
else:
    print(list1, '没有重复记录')

if repeat_num := check_repeat(list2):
    print(list1, f'有{repeat_num}条重复记录' )
else:
    print(list1, '没有重复记录')

out:
[1, 1, 2, 3, 4, 5] 有1条重复记录
[1, 1, 2, 3, 4, 5] 没有重复记录
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值