简介

列表推导式(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'))# YWRzdnNkZWdhMTVzMWRhc2Rhdecodestr = base64.b64decode(encodestr)print(decodestr)# b'adsvsdega15s1dasda'print(str(decodestr, 'utf-8'))# adsvsdega15s1dasda

蓝鲸智云

本文由腾讯蓝鲸智云编辑公布,腾讯蓝鲸智云(简称蓝鲸)软件体系是一套基于PaaS的技术解决方案,致力于打造行业当先的一站式自动化运维平台。目前曾经推出社区版、企业版,欢送体验。

  • 官网:https://bk.tencent.com/
  • 下载链接:https://bk.tencent.com/download/
  • 社区:https://bk.tencent.com/s-mart...