Python深入理解① 一切皆對象
靜態語言與動態語言
靜態語言:代碼在編譯的時候變量數據類型確定的,大部分靜態語言在編寫的過程中就要定義好數據類型
動態語言:代碼是運行的時候變量數據類型確定的,變量可直接賦值而不用定義類型
靜態語言優勢:可以很容易看出,靜態語言由於數據類型是定死的,使得它的優勢變現爲IDE更容易發現錯誤,對接第三方包的時候也更容易知道獲取數據的類型,不容易被不知道的情況下被賦值不同數據類型的數據,從而減少了一定侵害性
動態語言優勢:能夠減少定義代碼變量數據類型定義、更具有靈活性,可以把更多的精力花在業務邏輯上。
函數和類也是對象
具有以下幾個特性:
- 可以直接賦值給一個變量
- 可以添加到集合對象中
- 可以作爲參數傳遞給函數
- 可以當做函數的返回值
注:()代表函數運行
Type、Object、Class的關係
a=1
b="abc"
print(type(1)) # <class 'int'>
print(type(int)) # <class 'type'>
print(type(b)) # <class 'str'>
print(type(str)) # <class 'type'>
print(type(object)) # <class 'type'>
print(type(type)) # <class 'type'>
print(type.__bases__) # (<class 'object'>,)
print(object.__bases__) # ()
print(int.__bases__) # (<class 'object'>,)
print(str.__bases__) # (<class 'object'>,)
由上面的輸出結果我們可以明顯看出 type->int->1, type->str->“abc”,即type->class->object,而type也是屬於type,type的基類是object,object基類是空集,int,str的基類也是object,因此可以用一張圖來表示。
Type把Type也能夠自己實例化,所以Python把一切都變成了對象,全部都繼承object這個基類。
Python中常見的內置變量
None: None對象全局只有一個
a = None
b = None
print(id(a) == id(b)) # True
數值類型:int、float、complex(複數)、bool
迭代類型:可以進行迭代、for循環
序列類型:list、bytes、array、tuple、str、array
映射類型:dict
集合類型:set、frozenset(不可修改set)
上下文管理類型:with
其他類型:模塊類型、函數類型、方法類型、class和實例、代碼類型、Object類型等等