這篇主要是講一些比較深入的東西,偶爾才會碰到一次的東西,基本上是按照我現在碰到的機率由高至低排序的。
在 Python 中有關類別、函數以及變數的名稱並沒有限制如何命名,但是按照規則命名會更快更容易解讀 code,尤其是遇到較大型的專案時。基本規則如下:
一定要遵守的:
要注意的:
推薦的方式:
類型 | 方式 | 範例 |
---|---|---|
Local variable | 一律小寫,文字串接的時候使用下底線 | val_name = 123 |
Globals(全域變數), Constants(常數) | 一律大寫 | PI=3.14 |
function(函數) | 一律小寫,文字串接的時候使用下底線 | def add(): |
Class(類別) | 單字開頭第一個字大寫,其餘小寫,文字串接不使用下底線 | ClassName |
Module(模組), Package(套件) | 一律小寫(J些下下下一篇會講到) | module.py |
range(start, end, step),最少要有 end 。如果只輸入兩個數字,那兩個會是 start 跟 end。
如果一個字串中有需要插入較多的變數,要組合在一起就比較麻煩,例如:
''' Input '''
name = 'ithome'
year = 2021
month = 9
day = 4
weight = 58.5
height = 163
print('My name: ' + name + '\nToday: ' + str(year) + '/' + str(month) + '/' + str(day) + '\nMy height: ' + str(height) + '\nMy weight: ' + str(weight))
''' Output '''
My name: ithome
Today: 2021/9/3
My height: 163
My weight: 58.5
像這樣要組合起來就比較麻煩,不過 Python 中提供了一個方便好用的字串格式化方式 .format()
,可以將字串中要帶入值得位置用大括號括起來,然後再 format()
的小括號中填入想要的值。例如:
''' Input '''
name = 'ithome'
year = 2021
month = 9
day = 3
weight = 58.5
height = 163
print('My name:{}'.format(name))
print('Today:{y}/{m}/{d}'.format(y=year, m=month, d=day))
print('My height:{1:>6d}\nMy weight:{0:>6.2f}'.format(weight, height))
''' Output '''
My name:ithome
Today:2021/9/3
My height: 163
My weight: 58.50
知道後可已用得更順手的東西:
:
前面可以使用索引值或 key-value 進行取值,後面可以加格式化方式,也可都不使用。{:<}
, {:^}
, {:>}
是左、中、右對齊。{:+}
表示帶正負號。My height
){:d}
、 {:f}
、 {:e} or {:E}
、 {:x} or {:X}
、 {:o}
、 {:b}
分別是整數、浮點數、科學記號(大小寫)、十六進位(大小寫)、八進位、二進位{:,}
的方式以逗號分隔數字(千分位) ex: print('{:,}'.format(123456)) # 123,456
{:%}
輸出百分比(自動乘100) ex: print('{:.0%}'.format(0.3)) # 30%
{:%?}
的方式輸出日期時間,有 * 表示根據地區會有不同的輸出,例如:
%a
星期縮寫%A
星期全寫%w
星期數字%d
日期%b
月份縮寫 *
%B
月份全寫 *
%m
月份數字%y
西元年二位數字%Y
西元年四位數字%H
24小時制%I
12小時制%p
AM 或 PM *
%M
分%S
秒%f
微秒六位數字%c
日期和時間 *
%x
日期 *
%X
時間 *
u -> unicode (會處理跳脫字元) | Python 預設字串編碼方式
r -> 非轉義原生字元 (不會處理跳脫字元)
b -> bytes位元組
f -> 在字串內支援大括號內的 Python 表示式 (就是指第四點)
''' 如果這樣輸入 '''
name = 'ithome'
str_default = 'Hello {name} \n Welcome'
str_u = u'Hello {name} \n Welcome'
str_r = r'Hello {name} \n Welcome'
str_b = b'Hello {name} \n Welcome'
str_f = f'Hello {name} \n Welcome'
''' 每個輸出就會像這樣 '''
# Input
print(str_default)
# Output
Hello {name}
Welcome
# Input
print(str_u)
# Output
Hello {name}
Welcome
# Input
print(str_r)
# Output
Hello {name} \n Welcome
# Input
print(str_b)
# Output
b'Hello {name} \n Welcome'
# Input
print(str_f)
# Output
Hello ithome
Welcome
bytes 這邊可能看不太出來,搭配第六點看會更清楚。
:::info
常用跳脫字元
字元 | 意義 |
---|---|
\\ | 反斜線 \ |
\' | 單引號 ' |
\" | 雙引號 " |
\b | 空格(BS) |
\n | 換⾏(LF) |
\r | 回車(CR) |
\t | 水平縮排(TAB) |
\f | 換頁(FF) |
0o?? | 8進位(數字零跟英文小寫O) |
0x?? | 16進位(數字零跟英文小寫X) |
::: |
在 Python 中 str 預設是使用 unicode 進行資料處理的。不過在某些情況,需要將 unicode 轉換為其他格式,所以就需要使用到編解碼。
s = '你好'
# Input
print(s.encode('utf-8'))
# Output
b'\xe4\xbd\xa0\xe5\xa5\xbd'
# Input
print(s.encode('big5'))
# Output
b'\xa7A\xa6n'
那麼進階的就大概這樣,主要是可以將常用的東西中,處理起來比較麻煩的東西簡單處理掉的部分。
大家掰~掰~