1. 程式人生 > 實用技巧 >python之數字的知識點小結

python之數字的知識點小結

python中的數字是不可變物件,有整形(int)、浮點型(float)、複數(complex)、布林型(bool)。

整形

  • 小數字池:範圍是-5至256,當i數值在這個範圍內時直譯器不需要新建物件,而是直接把快取中的id賦給變數。

    # 在repl環境中測試下列程式碼
    >>> a=250
    >>> 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和0。None表示無值,值的大小未知;0表示有值,值的大小已經確定。

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']