Python 速查手冊

2.1 變數與物件

本書已有新版,請參考 Python 簡易手冊 - 目錄

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 教材首頁
回程式語言教材首頁