變數與資料型別

1. 識別字

程式中的變數、函式、類別…等會給於名稱,這些名稱就稱為「識別字」。識別字在程式中必須是唯一的名稱,識別字的命名規則如下:

  1. 識別字是由大小寫英文字母阿拉伯數字底線(_) 所組成。但限用英文字母或底線(_)當開頭,第二個字元以後才可以使用數字。
  2. 大小寫字母視為不相同的字元。
  3. 不能使用保留字 (或稱關鍵字)當作識別字。

[例] 下列為合法的識別字:

p、total、_ok、stu_score、lucky、goodMoring、UserPassy

[例] 下列為不合法的識別字:

7Eleven # 不能以數字開頭                  A B   # 不能使用空白
B&Q     # 不能使用&字元                   and  # 不能使用保留字

2. 保留字

保留字(Reserved Word)又稱關鍵子(Keyword),是 Python 語言定義具特定用途,專門供程式設計使用的識別字,透過這些保留字,配合運算子(Operator)、分隔符號(Seperator)..等,就可以撰寫出各種敘述(Statement 或稱陳述式)。因為保留字已經有特定用途,所以不允許使用保留字來做識別字。下表為 Python3.x 所定義的保留字:

andasassertasyncawaitbreakclass
continuedefdelelifelseexceptFalse
finallyforfromglobalifimportin
islambdareturntrywhilewithyield

3. 變數宣告

  1. 變數的內容值會隨程式而改變,使用變數可以使得程式靈活,提高程式的功能。 a = b + 1敘述中,a、b 為變數,1 為常值。

  2. 常值不必經過宣告就可以在程式中使用,但變數使用前必須先行宣告,宣告變數時要給予名稱,並指定變數值

  3. Python程式是採用動態型別,程式在直譯時才根據變數值,宣告成適當的資料型別,並配置對應的記憶體空間給該變數使用。

  4. 在程式執行時,也可以隨時更動變數的資料型別,只要使用指定運算子「=」,就能重新指定變數所參考的物件。

  5. 存取變數時,在低階語言要指定記憶體位址,但在高階語言是利用變數名稱來指定較簡便。

  6. 變數宣告語法如下:

    • 方法1
      變數名稱=變數值
    • 方法2
      變數名稱1,變數名稱2[,變數名稱3⋯]=變數值1,變數值2[變數值3⋯]
    • 方法3
      變數名稱1[=變數名稱2=變數名稱3⋯]=變數值

    說明

    1. 宣告變數時必須指定變數值,因為直譯器才能選擇適當的資料型別,指定時要使用「=」指定運算子。
    2. 方法2可以同時宣告多個變數,變數和變數值間以「,」逗號加以區隔即可。另外,要注意變數和變數值的數量要相同。
    3. 方法3可以同時宣告多個變數,並且指定變數值都相同

變數的名稱除了要遵循識別字的命名規則外,要使用易懂而且有意義的名稱,以提高程式的可讀性。不要貪圖一時方便,使用簡單且無意義的字母當做變數名稱,會造成以後維護程式的困擾。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類別的實體。可以使用內建函式來處理整數。

  1. type()函式: 可以取得物件的類別。
  2. bin()函式: 可以將十進制整數轉換成二進制。
  3. oct()函式: 可以將十進制整數轉換成八進制。
  4. hex()函式: 可以將十進制整數轉換成十六進制。
  5. 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的結果    -> 48

5. 布林資料型別

布林值是屬於 bool類別,使用 bool() 函式可轉成布林常值 TrueFalse
雖然布林值也可以用整數 10表示,但是其實使用 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' 轉成布林值  -> True

6. 浮點數資料型別

Python內建 float浮點數資料型別,又提供 decimal資料型別,可提高準確度。

一. float資料型別

float浮點數資料型別,屬於float類別。如果要將數值轉成浮點數資料型別,可以提高數值的準確度。

  1. float()函式:可以將整數和數值字串轉換成浮點數。
  2. is_integer()方法:可以檢查浮點數是否小數位為0(即為整數),傳回值為True(是整數)和False(非整數)。
  3. ‚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 資料型別常用函式

  1. Decimal.from_float()函式: 可以將浮點數常值轉換成 decimal型別。
  2. .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

相關主題與延伸閱讀