iT邦幫忙

2021 iThome 鐵人賽

DAY 4
1

這篇主要是講一些比較深入的東西,偶爾才會碰到一次的東西,基本上是按照我現在碰到的機率由高至低排序的。

1. Python 命名規則

在 Python 中有關類別、函數以及變數的名稱並沒有限制如何命名,但是按照規則命名會更快更容易解讀 code,尤其是遇到較大型的專案時。基本規則如下:

一定要遵守的:

  • 允許 a-z A-z 0-9 和 _ , 但是 開頭不可為數字 (開頭也儘量不要是下底線,開頭為下底線大多都有特殊用途)
  • 比較特殊的
    • 特殊的變數, 開頭和結尾都加 兩個下底線 , ex: __init__
    • 特殊的 class — 使用 單下底線或雙下底線
    • 開頭單下底線 — 用在 private 的 method or variable
    • 結尾單下底線 — 用在避免和 python keyword 的衝突 ex: str_
    • 開頭雙下底線 — 會觸發 name mangling, 用在 class definition, 不常使用

要注意的:

  • 變數區分大小寫
  • 變數長度沒有限制

推薦的方式:

類型 方式 範例
Local variable 一律小寫,文字串接的時候使用下底線 val_name = 123
Globals(全域變數), Constants(常數) 一律大寫 PI=3.14
function(函數) 一律小寫,文字串接的時候使用下底線 def add():
Class(類別) 單字開頭第一個字大寫,其餘小寫,文字串接不使用下底線 ClassName
Module(模組), Package(套件) 一律小寫(J些下下下一篇會講到) module.py

2. Python 中沒有 Null 而是 None

3. range

range(start, end, step),最少要有 end 。如果只輸入兩個數字,那兩個會是 start 跟 end。

4. 字串格式化

如果一個字串中有需要插入較多的變數,要組合在一起就比較麻煩,例如:

''' 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 時間 *

5. string 前綴 u, r, b, f

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)
:::

6. Encode and Decode

在 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'

參考資料

Python Format String 字串格式化整理

那麼進階的就大概這樣,主要是可以將常用的東西中,處理起來比較麻煩的東西簡單處理掉的部分。

大家掰~掰~


上一篇
Day 03 Python 入門
下一篇
Day 05 Decorator
系列文
月光下的Flask之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言