腾讯蓝鲸智云
作者腾讯蓝鲸智云·2022-06-28 19:07
系统运维工程师·腾讯科技(深圳)有限公司

【经验分享】Python技巧之推导式

字数 1817阅读 638评论 0赞 0

简介

列表推导式(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

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广