列表推導式(List Comprehensions)也是來自函數式編程語言,可以優雅的對一個序列進行數據篩選和處理得到一個結果列表。
比如,把一個列表中所有大於0的數平方後生產一個新的列表。
num = [-2, 3, 5, -4, 10, 7]
按常規做法,我們會
num = [-2, 3, 5, -4, 10, 7]
result = []
for x in num:
if x > 0:
result.append(x**2)
print result
然後,用列表推導式的話,只需要
print [x**2 for x in num if x > 0]
怎麼解讀這個式子呢?
把這個式子分成三個部分:輸出處理、for循環、if判斷。其中if判斷部分是可選的。
if 判斷部分是用來篩選。
輸出處理部分比較靈活,隨便自己想怎麼處理。
比如有個列表A = ‘1’, ‘2’, ‘3’,我們可以int(x) for x in A,把列表所有元素轉換成int類型。
上面是最基本的形式了。還有一些稍微復雜的形式,怎麼解讀呢?
方法是,除開“輸出處理”部分,其它都是按從左到右順序來的。
1)多個for循環
[(x, y) for x in range(3) for y in range(5)]
在這裡,處理部分是(x, y),其它按從左到右。等價於
for x in range(3):
for y in range(5):
#處理部分
2)嵌套列表推導式
[[0 for y in range(3)] for x in range(5)]
在這裡,處理部分是0 for y in range(3),其它按從左到右。等價於
for x in range(5):
#處理部分
3)多個if判斷
[(x, y) for x in range(3) if x>1 for y in range(5) if y>2]
在這裡,處理部分是(x, y),其它按從左到右。等價於
for x in range(3):
if x>1:
for y in range(5):
if y>2:
#處理部分
1)其他推導式
除了列表推導式。還有生成器推導式、集合推導式(python2.7及以上)、字典推導式(python2.7及以上)。
[x for x in range(3)] #-> 列表推導式
(x for x in range(3)) #-> 生成器推導式
{x for x in range(3)} #-> 集合推導式
{x:None for x in range(3)} #-> 字典推導式
比如
>>> d = {'a':1, 'b':2, 'c':3}
>>> d2 = {v:k for k,v in d.items()}#反向映射
>>> d2
{1: 'a', 2: 'b', 3: 'c'}
>>> d3 = {k:v.upper() for k,v in d2.items()}#把所有值都大寫
>>> d3
{1: 'A', 2: 'B', 3: 'C'}
2)Python3 base64編碼與解碼
在藍鯨項目中,部分接口的報文是通過base64加密傳輸的,所以在進行接口自動化時,需要對所傳的參數進行base64編碼,對拿到的響應報文進行解碼;
例如:作業平台的fast_execute_script(快速執行腳本)的script_content
python3.x 中字符都為unicode編碼,而b64encode函數的參數為byte類型,所以必須先轉碼。
import base64
# encode 編碼
# decode 解碼
s ='adsvsdega15s1dasda'
encodestr = base64.b64encode(s.encode('utf-8'))
print(encodestr)
# b'YWRzdnNkZWdhMTVzMWRhc2Rh'
print(str(encodestr, 'utf-8'))
# YWRzdnNkZWdhMTVzMWRhc2Rh
decodestr = base64.b64decode(encodestr)
print(decodestr)
# b'adsvsdega15s1dasda'
print(str(decodestr, 'utf-8'))
# adsvsdega15s1dasda
本文由騰訊藍鯨智雲編輯發布,騰訊藍鯨智雲(簡稱藍鯨)軟件體系是一套基於PaaS的技術解決方案,致力於打造行業領先的一站式自動化運維平台。目前已經推出社區版、企業版,歡迎體驗。