今天給大家分享幾個Python裡面的騷操作,大家會更加感受到Python編碼的強大。
1.用字典映射代替switch case語句
大家首先看下面這段用C#編寫的switch case代碼,代碼很好了解,switch函數傳入一個參數day,參數的不同對應不同的case語句,那怎麼将這段代碼用Python裡面的字典代替呢?
switch(day)
{
case 0:
dayName = "Sunday";
break;
case 1:
dayName = "Monday";
break;
case 2:
dayName = "Tuesday";
break;
...
default:
dayName = "Unknown";
break;
}
複制
我的第一反應是if else條件語句,但是如果用條件語句的話,就展現不出現Python代碼的強大了,條件語句是各種語言都通用的一種形式,再想想有沒有其他的方法?
啊哈,我想到了字典,字典裡面的鍵值對剛好可以映射這個業務功能,具體代碼如下
day = 0
switcher = {
0:'Sunday',
1:'Monday',
2:'Tuesday'
}
day_name = switcher.get(day,'Unknown')
print(day_name)
複制
上面代碼中用到一個Python内置函數get,get函數有很好的容錯性,第一個參數就是day,第二個剛好對應switch case語句中的‘unknown’
但這樣寫還是用一定的局限性,有點基礎的同學都知道,switch case之間可以随便擴充,寫很多子產品,那麼這樣一來,再把字典的值當作是一個常量就不合适了,是以,我們可以自定義函數,将函數作為一個參數傳入字典中的值位置,具體代碼如下
day = 0
def get_sunday():
return 'Sunday'
def get_MOnday():
return 'Monday'
def get_Tuesday():
return 'Tuesday'
def get_default():
return 'Unknown'
switcher = {
0:get_sunday,
1:get_MOnday,
2:get_Tuesday
}
day_name = switcher.get(day,get_default)()
print(day_name)
複制
2.清單推導式
叫清單推導式不是說隻能推導清單,至于它為什麼叫這個,who care,還是通過一個執行個體來了解。
比如現在有一個清單,通過周遊清單,然後将每個元素平方後列印結果。
a = [1,2,3,4,5,6,7,8]
b = [i**2 for i in a]
print(b)
複制
現在如果加一個條件,将清單中大于5的元素平方後列印結果,也很友善,直接在後面加一個if 條件判斷
a = [1,2,3,4,5,6,7,8]
a1 ={1,2,3,4,5,6,7,8} #集合推導
b = [i**2 for i in a if i>=5]
b1 = {i**2 for i in a if i>=5}
print(b)
print(b1)
複制
3.字典推導清單推導式
剛才已經說了,不僅僅隻有清單可以用清單推導式,那字典如何實作這個功能呢?
students = {
'喜小樂':18,
'石敢當':20,
'橫小五':15
}
b = {key for key,value in students.items()}
print(b)
複制
通過上面的代碼可以看出,首先字典的最外層是{},其次字典有key和value,再用一個内置函數items将字典的鍵或值提取出來。
當然,我們也可以将鍵和值颠倒一下
students = {
'喜小樂':18,
'石敢當':20,
'橫小五':15
}
b = {value,key for key,value in students.items()}
print(b)
複制
最後,我們用這個看一下元組的清單推導式
students = {
'喜小樂':18,
'石敢當':20,
'橫小五':15
}
b1 = (key for key,value in students.items()) #元組推導清單推導式
print(b1)
複制
<generator object <genexpr> at 0x000000000216A750>
複制
運作代碼,結果很奇怪,不能将鍵和值顯示出來,而是出現generator,為什麼會這樣呢?因為元組是不可變的,這個知識點在前面學習過,不知道大家還有沒有印象。
那怎麼将鍵和值顯示出來,具體代碼如下:
students = {
'喜小樂':18,
'石敢當':20,
'橫小五':15
}
b1 = (key for key,value in students.items()) #元組推導清單推導式
for x in b1:
print(x)
複制
總結
清單推導式是一種非常簡潔的建立清單的方式,很多時候我們需要建立一個滿足特定要求的新清單,不得不用for循環建立,而用清單推導式來表達隻需要一行代碼即可。