首頁 > 軟體

python內建型別與標準型別

2022-08-18 14:01:52

前言

全可以存取相同的物件, 因此我們講 這種變數名也叫物件的 "參照".

驗證1:

a = 2
b = 3
print(id(a),id(b))  #140734889681584 140734889681616
b = 2
print(id(b))    #140734889681584

驗證2:

b = 3
print(id(b))    #140734889681616
b +=1
print(id(b))    #140734889681648

相加其實是建立一個新的物件,然後把這個標籤b移到這個新的物件上

思考: 為什麼Python的變數是這樣的? 和C/C++差異這麼大捏?

  • 空間考慮: 比如一個數位2, 在Python中只有這麼一個數位2; 而一個C/C++程式中可能會有N個2.
  • 時間考慮: 比如 a=b 這樣的賦值, 只是修改了一下貼標籤的位置, 不需要對物件進行深拷貝. 為什麼Python可以這麼做, 而C/C++不能這樣設計呢?
    • C++中的賦值相當於深拷貝, a = 100 b = a ->記憶體中存放了兩份100
    • java和python相當於淺拷貝 a = 100 b = a ->a和b都是100的參照,記憶體中只存放了一份100

Python的GC機制, 是這樣的設定的基礎.

理解物件和型別

關於不可變型別和可變型別

  • python中的 int,str,float,tuple其實是不可變型別的變數 (即:沒辦法修改一個已經存在的int型別的物件的值),只能建立新的,不能修改已經有的
s = "hehe"
s[0] = 'a'; #error 報錯 TypeError: 'str' object does not support item assignment

s = 'a'+s[1:]   #只能重新建立
print(s)    #aehe
#原來的hehe物件已經銷燬,s貼在了aehe這個物件的身上

列表和字典都是可變物件:

  • 有些物件是 "相似" 的, 於是我們把物件歸歸類. 比如把所有的整數歸為一類, 把所有的浮點數物件歸為一類,把所有的字串歸為一類.
  • 相同的型別的物件, 須有相同的操作. 比如, 所有的整數物件, 都可以進行加減乘除操作. 所有的字串都可以使用切片操作.

關於動態靜態強弱型別

  • Python是一種 動態強型別 程式語言.
  • 動態是指執行時進行變數型別檢查; 強型別 指型別檢查嚴格, 並且"偏向於"不允許隱式轉換.

  • 動態型別:一個變數在執行過程中型別發生變化
  • 靜態型別:一個變數在執行過程中型別不能發生變化
  • 強型別:越不支援隱式型別轉化,型別越強
  • 弱型別:越支援隱式型別轉化,型別越弱

類似的, C語言是一種靜態弱型別語言. Java的型別檢查更為嚴格, 一般認為是靜態強型別, 而Javascript則是動態弱型別

如:

int a = 10; long b = 20; a = b ->C++可以 java不可

int a = 10; bool b = false; a = b ->C++可以,把false當成0 java不可

動態型別:小規模下更好,使用靈活

大規模常用靜態型別,否則多人共同作業容易有歧義

但是型別:越強越好

標準型別

  • 整型
  • 浮點型

注意:如果想要比較兩個浮點數是否相同,不能直接比較,因為會有精度損失,要做差比較

  • 複數型
  • 布林型
  • 字串
  • 列表
  • 元組
  • 字典

其它內建型別

  • 型別
  • NULL物件(None)
  • 檔案
  • 函數
  • 模組

型別的型別

前面我們說, 型別也是物件

print(type(type(100)))  #<class 'type'>  
print(id(type(100)))    #140734889206240

None ->空型別

Python有一個特殊的型別, 稱為NoneType. 這個型別只有一個物件, 叫做None

print(type(None))   #<class 'NoneType'>
  • NoneType類似於C語言中的void
  • None類似於C語言的空指標NULL(NULL的含義:特指0號地址的記憶體)
  • None這個物件沒啥有用的屬性, 它的布林值為False
def func():
    print("haha")
ret = func()    #列印haha     函數沒有返回值卻接收了,就是None
print(ret)  #列印None,

內建型別的布林值

所有的標準物件, 均可以用於布林測試(放到if條件中).

下列物件的布林值是False:

  • None
  • False
  • 所有值為0的數位(0, 0.0, 0.0 + 0.0j (複數))
  • "" (空字串)
  • [] (空列表)
  • () (空元組)
  • {} (空字典)
if "":
    print("True")
else:
    print("False")
#列印:False

其他情況下, 這些內建物件的布林值就是True.

到此這篇關於python內建型別與標準型別的文章就介紹到這了,更多相關python內建型別 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com