日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

python內建類型與標準類型_python

作者:芒果在努力??????? ? 更新時間: 2022-10-15 編程語言

前言

全可以訪問相同的對象, 因此我們講 這種變量名也叫對象的 "引用".

驗證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.

原文鏈接:https://juejin.cn/post/7132270212530847774

欄目分類
最近更新