變數與資料型別
1. 識別字
程式中的變數、函式、類別…等會給於名稱,這些名稱就稱為「識別字」。識別字在程式中必須是唯一的名稱,識別字的命名規則如下:
- 識別字是由大小寫英文字母、阿拉伯數字和底線(_) 所組成。但限用英文字母或底線(_)當開頭,第二個字元以後才可以使用數字。
- 大小寫字母視為不相同的字元。
- 不能使用保留字 (或稱關鍵字)當作識別字。
[例] 下列為合法的識別字:
p、total、_ok、stu_score、lucky、goodMoring、UserPassy[例] 下列為不合法的識別字:
7Eleven # 不能以數字開頭 A B # 不能使用空白
B&Q # 不能使用&字元 and # 不能使用保留字2. 保留字
保留字(Reserved Word)又稱關鍵子(Keyword),是 Python 語言定義具特定用途,專門供程式設計使用的識別字,透過這些保留字,配合運算子(Operator)、分隔符號(Seperator)..等,就可以撰寫出各種敘述(Statement 或稱陳述式)。因為保留字已經有特定用途,所以不允許使用保留字來做識別字。下表為 Python3.x 所定義的保留字:
and | as | assert | async | await | break | class |
continue | def | del | elif | else | except | False |
finally | for | from | global | if | import | in |
is | lambda | return | try | while | with | yield |
3. 變數宣告
-
變數的內容值會隨程式而改變,使用變數可以使得程式靈活,提高程式的功能。 a = b + 1敘述中,a、b 為變數,1 為常值。
-
常值不必經過宣告就可以在程式中使用,但變數使用前必須先行宣告,宣告變數時要給予名稱,並指定變數值。
-
Python程式是採用動態型別,程式在直譯時才根據變數值,宣告成適當的資料型別,並配置對應的記憶體空間給該變數使用。 -
在程式執行時,也可以隨時更動變數的資料型別,只要使用指定運算子「=」,就能重新指定變數所參考的物件。
-
存取變數時,在低階語言要指定記憶體位址,但在高階語言是利用變數名稱來指定較簡便。
-
變數宣告語法如下:
- 方法1
變數名稱=變數值 - 方法2
變數名稱1,變數名稱2[,變數名稱3⋯]=變數值1,變數值2[變數值3⋯] - 方法3
變數名稱1[=變數名稱2=變數名稱3⋯]=變數值
說明
- 宣告變數時必須指定變數值,因為直譯器才能選擇適當的資料型別,指定時要使用「=」指定運算子。
- 方法2可以同時宣告多個變數,變數和變數值間以「,」逗號加以區隔即可。另外,要注意變數和變數值的數量要相同。
- 方法3可以同時宣告多個變數,並且指定變數值都相同
- 方法1
變數的名稱除了要遵循識別字的命名規則外,要使用易懂而且有意義的名稱,以提高程式的可讀性。不要貪圖一時方便,使用簡單且無意義的字母當做變數名稱,會造成以後維護程式的困擾。Python3 以上版本支援識別字名稱可以使用中文字。但是Python具有共享精神,仍然建議不要使用中文字。若變數不再使用,可以使用 del 指令來刪除變數,如此可以將占用的記憶體釋放出。
[例] 下列為宣告變數的範例:(檔名: variable.py)
yesNo = 'y' #宣告yesNo變數,並指定變數值為字串'y'
#同時宣告passScore、maxScore、minScore三個變數,並指定變數值為整數60、100和0
passScore, maxScore, minScore = 60, 100, 0
power1 = power2 = 100 #宣告power1和power2變數,變數值都為100
total = 1.23456E+6 #宣告total變數,並設變數值為浮點數1234560.0
print(yesNo)
print(passScore, maxScore, minScore)
print(power1, power2)
print(total)
del total
#print(total) #執行會產生錯誤,因為變數已經刪除變數名常採駝峰式命名法(
Camel Case),用多個有意義的英文單字串連來命名,單字的第一個字母大寫其餘小寫,就像駱駝的駝峰一般。變數名稱第一個單字的開頭宇母通常為小寫,如果變數名稱是單一單字,例如:「單價」可使用price 名稱。如果是多個單字的組合,例如:「特價」可以使用priceForVip名稱。
4. 整數資料型別
Python內建的整數型別是屬於 int 類別,整數的長度不受限制。在 Python中整數是int類別的實體。可以使用內建函式來處理整數。
- type()函式: 可以取得物件的類別。
- bin()函式: 可以將十進制整數轉換成二進制。
- oct()函式: 可以將十進制整數轉換成八進制。
- hex()函式: 可以將十進制整數轉換成十六進制。
- int()函式: 可以將其他進制的整數轉換成十進制,也可以將數字字串,轉換成int整數。
[例] 顯示整數的類別和十進制轉成其他進制。 (檔名: int_type.py)
print(type(12)) # 顯示整數常值 12 的類別 -> <class 'int'>
print(bin(12)) # 顯示整數常值 12 的二進制值 -> 0b1100
print(oct(12)) # 顯示整數常值 12 的八進制值 -> 0o14
print(hex(12)) # 顯示整數常值 12 的十六進制值 -> 0xc
print('12'*4) # 顯示 '12'*4的結果 -> 12121212
print(type('12')) # 顯示'12'的類別 -> <class 'str'>
print(int('12')*4) # 顯示int('12')*4的結果 -> 485. 布林資料型別
布林值是屬於 bool類別,使用 bool() 函式可轉成布林常值 True和 False。
雖然布林值也可以用整數 1和0表示,但是其實使用 bool()函式轉型時,數值只要不是 0 就是 True,而 物件不是「空」就是 True。
[例] 布林值的各種範例。 (檔名:bool_type.py)
b=False # 宣告 b 為布林變數,變數值為 False
print(type(b)) # 顯示布林變數 b 的類別 -> <class 'bool'>
print(type(1)) # 顯示整數常值 1 的類別 -> <class 'int'>
print(bool(1)) # 使用 bool 函式將 1 轉成布林值 -> True
print(bool(-1)) # 使用 bool 函式將 -1 轉成布林值 -> True
print(bool('Python')) # 使用 bool 函式將 'Python' 轉成布林值 -> True6. 浮點數資料型別
在Python內建 float浮點數資料型別,又提供 decimal資料型別,可提高準確度。
一. float資料型別
float浮點數資料型別,屬於float類別。如果要將數值轉成浮點數資料型別,可以提高數值的準確度。
float()函式:可以將整數和數值字串轉換成浮點數。is_integer()方法:可以檢查浮點數是否小數位為0(即為整數),傳回值為True(是整數)和False(非整數)。round()函式:可以將浮點數的小數部分,指定位數做四捨五入。語法為:round(浮點數[,小數位數]),如果不指定小數位數時,就預設四捨五入為整數。
[例] 使用各種方法來處理浮點數: (檔名:float_type.py)
f, i =1.2345, 12345
print(type(f)) # 顯示浮點數變值 f 的類別 -> <class 'float'>
f2=float(i) # 用 float 函式將整數變數 i 轉成浮點數
print(float(f2)) # 顯示 f2 的變數值 -> 12345.0
print(float.is_integer(f)) # 用 is_integer() 方法檢查變數f是否為整數 -> False
print(float.is_integer(f2)) # 檢查變數 f2 是否為整數 -> True
print(round(f,2)) # 用 round() 函式將變數 f 四捨五入到小數二位 -> 1.23
print(round(f)) # 用 round() 函式將變數 f 四捨五入到整數 -> 1 二. decimal 資料型別
Python 另外又提供 decimal資料型別來處理浮點數,可提高數值的準確度。因decimal不是內建的型別,使用前要用import指令匯入decimal模組。
使用decimal類別的Decimal()方法,可以宣告decimal資料型別的浮點數資料。Decimal()方法的引數可以為整數常值或字串、浮點數字串。decimal型別的浮點數小數位數很長,如果要指定小數的有效位數時,在宣告時採用浮點數字串的格式,則字串的l小數位數就是有效位數。
decimal.Decimal(整數常值 | 整數字串 | 浮點數字串)[例] 宣告 decimal 資料型別的浮點數: (檔名:decimal_type.py)
import decimal # 匯入 decimal 模組
f1,f2=10.0,3.0 # 宣告 f1、f2 變數並指定變數值為浮點數 10.0 和 3.0
d1=decimal.Decimal(10) # 宣告 d1 為 decimal 型別變數,值為整數常值 10
d2=decimal.Decimal('3.0') # 宣告 d2 為 decimal 型別變數,值為字串常值 '3.0'
print(type(d1)) # 顯示 d1 變數的類別 -> <class 'decimal.Decimal'>
print(f1/f2) # 顯示 f1 除以f2的值 -> 3.3333333333333335
print(d1/d2) # 顯示 d1 除以d2的值 -> 3.333333333333333333333333333
d3=decimal.Decimal('2.345') # 宣告 d3 為 decimal 型別變數,值為字串常值 '2.345'
d4=decimal.Decimal('6.78')
print(d3+d4) # 有效位數為三位 -> 9.125
print(d3*d4) # 有效位數為五位 -> 15.89910| 運算 | 規則 | 實例運算 | 小數點後位數 |
|---|---|---|---|
| 加減法 | 取小數點後**最多(最精確)**者 | 3 位 (9.125) | |
| 乘法 | 兩者小數點後位數相加 | 5 位 (15.89910) |
三. decimal 資料型別常用函式
Decimal.from_float()函式: 可以將浮點數常值轉換成decimal型別。.getcontext()函式: 可以列出Decimal資料型別目前算術運算時的各種設定值。利用getcontext()函式的prec屬性可以設定有效位數(含整數和小點位數),預設值為28。另外,rounding屬性可以設定進位的方式,常用的rounding屬性值:ROUND_HALF_EVEN:四捨六入數值為五時,若前面為奇數就進位;偶數就捨去。(預設值)ROUND_DOWN:無條件捨去。ROUND_UP:無條件進位。
[例] 設定 decimal 資料型別運算時的有效位數: (檔名:getcontext.py)
import decimal #匯入decimal模組
d1=decimal.Decimal.from_float(123.4567) # 將浮點數資料 123.4567 轉型為 decimal 資料型別
d2=decimal.Decimal.from_float(34.5678) # 將浮點數資料 34.5678 轉型為 decimal 資料型別
print(d1+d2) # -> 158.0244999999999961914909363
print(decimal.getcontext()) # 取出目前 decimal 資料型別運算的設定值 Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[Inexact, Rounded], traps=[InvalidOperation, DivisionByZero, Overflow])
print(decimal.getcontext().prec) # 有效位數 28 位 -> 28
print(decimal.getcontext().rounding) # -> ROUND_HALF_EVEN
decimal.getcontext().prec=8 # 設定有效位數 8 位
print(d1+d2) # -> 158.02450