Python 速查手冊

2.1 變數與物件

Python 中所有東西都是物件 (object) ,這是說 Python 裡的資料 (data) 都是物件。凡是物件都有 id 號碼、型態 (type) 及數值 (value) ,分別可用以下三個內建函數取得

id() 取得物件的 id 號碼,其為整數值, type() 得到 'type' 類別的物件, print() 印出物件的數值,或是印出物件的字串 (string) 表達形式,並無回傳值 (return value) 。

變數 (variable) 為 Python 中自行定義的識別字 (identifier) ,若將物件的字面常數 (literal) 或定義形式指派給變數,該變數便具有物件的控制權。

以下程式建立變數 a 然後以 print() 印出 type() 回傳 'type' 類別物件的字串形式

a = 33
print(type(id(a)))
print(type(type(a)))
print(type(print(a)))

a = "33"
print(type(id(a)))
print(type(type(a)))
print(type(print(a)))

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:var01.py
# 功能:示範 id() 、 type() 、 print()
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 var01.py
<class 'int'>
<class 'type'>
33
<class 'NoneType'>
<class 'int'>
<class 'type'>
33
<class 'NoneType'>
$

其中

print(type(print(a)))

這裡會先印出變數 a 的值,然後取得 type(print(a)) 回傳的 None ,所以會得到 'NoneType'

物件的值可以是可變的 (mutable) ,或是不可變的 (immutable) ,通常這是說複合資料型態 (compound data type) 的元素 (element) 是否可以替換,例如序對 (tuple) 及字串是不可變的,而串列 (list) 或字典 (dictionary) 是可變的。

當物件不再使用時,直譯器會自動垃圾收集 (garbage collection) ,釋放記憶體空間。例如上例中,當變數 a 重新指派給 另一個字串物件 "33" 時,原本的整數物件 33 便會被直譯器清除掉。

物件有屬性 (attribute) 及方法 (method) ,透過變數運用小數點符號 . 就能存取該物件的屬性、方法。許多 built-ins 的物件已具有預先定義的屬性或方法,以下程式示範不同物件的內建方法

a = 0.0
print(a.__str__())
print(a.__bool__())

a = 33
print(a.__str__())
print(a.__bool__())

a = "33"
print(a.__str__())
print(a.__len__())

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:var02.py
# 功能:示範 __str__() 、 __bool__()
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 var02.py
0.0
False
33
True
33
2
$

許多預先定義的方法或屬性,識別名稱前後都用連續兩個底線符號 _ ,如下

__method__()

上面例子的 __str__() 回傳物件的字串形式, __bool__() 回傳物件的真假值, __len__() 回傳複合資料型態物件的長度,也就是所具有元素的總數。

屬性類似變數,不過是物件專有的,方法類似函數 (function) ,也是物件專有的,不同的 built-ins 依物件特性會有不同預先定義的屬性或方法。各種 built-ins 預先定義的屬性或方法,詳細需查 The Python Standard Library

上一頁:單元 2 - 基本內建型態
Python 速查手冊 - 目錄
下一頁: 2.2 真假值
回 Python 教材首頁