关于python:经验分享Python技巧之推导式

52次阅读

共计 1805 个字符,预计需要花费 5 分钟才能阅读完成。

简介

列表推导式 (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 的技术解决方案,致力于打造行业当先的一站式自动化运维平台。目前曾经推出社区版、企业版,欢送体验。

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

正文完
 0