Python 特色寫法整理(1):給有程式基礎的人

URL Link //n.sfs.tw/15841

2022-05-18 22:39:42 By 張○○

python和其它的直譯式語言來說,(如php、perl)大同小異,雖然我很抗拒,但還是稍微摸了一下。

程式語言大同小異,所以這篇不給初學者看,只給有一點其它語言基礎的人要快速上手python的語法整理,本篇會著重在異差上說明,而不會仔細的說明,太難的我也不會。

我相信有些人看完重點提示後就能快速上手python。

結構

1. 不用大括號,採用縮排來分段。縮排可以用空白或是tab來決定,官方建議用 4 個空格縮排,不要用 tab 鍵。 一個縮排段落內的縮排方式與數量必須維持一致。 例如你決定用四個空白當縮排,那整個文檔的縮排就只能用四個空白,三個空白或五個空白都會報錯。我記得以前學過 true basic 也是這個架構。

2. 運算符(+-*/)、'='的前後請加上空白,雖然不會報錯,但會出現警告。

3. 行尾不必有分號 ';' ,加了也無所謂只是會警告,行前後不要有多餘的空白,否則會出錯或警告

4.  使用 # 作為註解,等於c-like語言的  '//' ;用三個雙引號 """ ... """ 等於c-like語言的  '/* */' 以大範圍註解。

5. 變數前不用加錢字號 '$'

6. python 算是強型別,有int, float, string, decimal, complex 等等,你無法忽略型別,例如你要印數字,你得把他轉成字串。

7. python 具有布林值 True/ False,首字必須大寫才是布林值。例如 a = True

8. 函數可回傳多值、多型態,不像一般語言只能回傳單值。

9. 可快速指定變數,例如 a, b, c = 1, 2, 3

運算子及資料結構

值得注意的運算子

x * y  乘法,字串的乘法就是複製

print('x'*10)  #xxxxxxxxxx
x // y  整數除法

x % y 餘數除法
x ** y  次方
 

字串拆解

字串拆解很簡單,因為字串就是一個字元串列

s = 'Onetwothree'
s1= s[1:] #netwothree
s2= s[3:-1] #twothre
s3= s[0].upper() + s[1:] #Onetwothree 首字大寫

 

串列 List

不稀奇,串列就是一維陣列,也是最常用的資料型態,使用中括號作標記

squares = [1, 4, 9, 16, 25]
squares[0] #1
squares[-1] #25
squares[-3:] # 新list [9, 16, 25]
squares + [36, 49, 64, 81] #接合  [1, 4, 9, 16, 25, 36, 49, 64, 81]
squares.insert(2, 22) # 在第2個位置加插入數字22,原本序號2後的數值往後移一位
squares[5] = 36 # 指定值
squares.append(216) # 加一個值在最後面
squares[:] = [] # 清空串列
clear(squraes) # 清空串列
squares[2:4] = [] # 清空第2,3 兩個位置的值,注意第4個位置的值沒有清掉。
del(squares[2]) # 清空第2兩個位置的值
len(squares) # 串列長度
squares.reverse()  # 前後顛倒
print(squares)  # 印出串列

如果串列裡的值也是串列,就形成多維或是鋸齒陣列。

唯讀串列 Tuple

名稱叫唯讀串列,是我自己取的名,官網叫『元組」我覺得不好。使用小括號作標記,裡面的內容一經給定是不能修改的,其餘和串列一樣。

solar = ('earth','jupiter', ['io', 'ganymede', 'europa'])

print(solar[0])  #earth
print(solar[2][2])  #europa
solar[2][2]='callisto'
print(solar[2][2])  #callisto <== 唯讀串列中的串列是可以修改的
solar[1]='mars'  #報錯,唯讀串列不能修改

串列可以使用 tuple() 函數轉成 tuple

squares = [1, 4, 9, 16, 25]
sqr= tuple(squares)

 

字典 dict

就是有名稱陣列(named array),相當於PERL的hash,使用大括號作標記

solar = {'earth': 'moon', 'jupiter': ['io', 'ganymede', 'europa'], 'pluto': 'charon', 'sun': 8}
solar['earth'] # moon
solar['jupiter'][1] # ganymede
len(solar) # 4 長度
del(solar['pluto']) #刪除一個項目
solar['mars']=['deimos', 'phobos']  #加入一個項目
print(solar)   # 印出集合

 

集合 set

集合是不錯的東西,可以用交集|、聯集&、差集-、對稱差集^(交集的相反)等等方式處理「不重覆」的資料

a = set([1,3,6,7,3])
b = set([1,2,5,6])
print(a)    #{1, 3, 6, 7} <== 移除重覆的3
print(a&b)  #{1, 6}
print(a|b)  #{1, 2, 3, 5, 6, 7}
print(a-b)  #{3, 7}
print(b-a)  #{2, 5}
print(a^b)  #{2, 3, 5, 7}

經過set處理過的資料型態會移除重覆、依序排列。

流程控制

if... elif ... else

注意elseif 改成elif

if 2 > 5:
    print('2 > 5')
elif 2 < 5:
    print('2 < 5')
else:
    print('2 == 5')

match ... case

沒有 switch...case....default  但是有 match...case ,在python 3.10版已後才有此功能。

注意不需要 break,也不會像 c-like語言一樣一路執行下去。

x = input("輸入數字: ")
match x:
    case 1: print('星期一')  #只有一行指令可寫同一行
    case 2:
      print('星期二')  # 不寫同一行要縮排
    case 3: pass  # 啥都不做
    case '4': print('星期四')
    case 5.0: print('星期五')
    case 6 | 7: print('Weekend')
    case _: print("輸入錯誤")  # 其它項目用 _

結果:

輸入數字: 3
<<啥都沒發生>>

輸入數字: 4 
輸入錯誤  <== 字元和字串和比對失敗

輸入數字: 5
星期五

for ... in

等於 foreach

solar = {'earth': 'moon', 'jupiter': ['io', 'ganymede', 'europa'], 'pluto': 'charon', 'sun': 8}
for it in solar:
    print(it + ': ', solar[it])

結果:
earth:  moon
jupiter:  ['io', 'ganymede', 'europa']
pluto:  charon
sun:  8

字串也可以一個一個取出來,請看範例

x = "字串a1;"  # list(x)=['字', '串', 'a', '1', ';']
for i in range(len(x)):
    print(x[i])

結果:


a
1
;

 

range() 函數來取代 for(;;)

range是一個類別,可以產生連續的「串列類別物件」,注意,不是產生「串列」

z = [0, 1, 2, 3, 4]  #串列
print(z) #[0, 1, 2, 3, 4] <== 印出串列
x = range(5)  #range物件
print(x, type(x))  #range(0, 5) <class 'range'>  <==印出類別本身
print(list(x))  #[0, 1, 2, 3, 4]

看看range函數回傳的內容

x = range(5)  #[0, 1, 2, 3, 4]  <== 注意不包括5
x = range(1, 5)  #[1, 2, 3, 4]  <== 注意不包括5
x = range(0, 6, 2)  #[0, 2, 4]  <== 注意不包括6
x = range(0, 10, 3)  #[0, 3, 6, 9]
x = range(0, -5, -1)  #[0, -1, -2, -3, -4]
x = range(0) #[] 
x = range(1, 0)  #[]
x = range(1, 0, -1)  #[1]

python沒有c-like的for(;;) 寫法,用range來取代。

 

使用range來快速產生串列

在python稱為 List Comprehension,我翻成「串列析解」,說穿了就是用遞迴的方式快速建立串列,不會很難,這個只要知道就好。

a1 = [i for i in range(5)]  #[0, 1, 2, 3, 4] <== 注意不包括5

a2 = [i for i in range(0,10,2)]  #[0, 2, 4, 6, 8] 產生偶數

a3 = [i for i in range(1,10,2)]  #[1, 3, 5, 7, 9] 產生奇數

a4 = [i for i in a3 if i > 3]  #[5, 7, 9] 限制條件

planet = ['mecury','venus','earth','mars','jupiter']
# 首字大寫
a5 = [i.title() for i in planet ]  #['Mecury', 'Venus', 'Earth', 'Mars', 'Jupiter']

# 串列中有字元'e'的前面加上 'the '
a6 = ['the ' + i for i in planet if 'e' in i]  #['the mecury', 'the venus', 'the earth', 'the jupiter']

因為以後可能用 numpy 來取代,所以太複雜的需要再查即可。

pass

啥都不幹的時候用,例如你啥都不幹到不能空在那的時候,就寫個 pass,請看 match...case 3的範例

break, continue

迴圈中的控制,和其它語言相同

raise, try...except

python中沒有 try... catch...finally,但有差不多的 try...except錯誤嘗試控制

n = 10
m = 0
try:
    print(n/m)
except:
    print('除以0錯誤')
結果:
除以0錯誤

下一篇寫函數、類別和其它的重點整理

結論

python的指令和功能不只這些,只是我做了簡要的整理,對於有其它程式基礎的人,希望這篇會對你有幫助。

有了以上對python的背景知識,接下來就可以玩點什麼了。