前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 中甜甜的语法糖

Python 中甜甜的语法糖

作者头像
wsuo
发布2020-07-31 15:35:36
1.5K0
发布2020-07-31 15:35:36
举报
文章被收录于专栏:技术进阶之路技术进阶之路

本文分三部分讲述 python 中常用的语法糖,为什么分三部分,因为考虑到大家可能对 python 中的一些特有的数据结构不太熟悉,所以首先介绍;文章的最后将会介绍一些经典的函数语法糖。

首先解释一下语法糖是什么意思,其实就是简化我们的代码,让那些复杂的操作交给解释器来完成,这些语法糖刚开始学的时候觉得很难记住,如果看别人写的语法糖更容易蒙圈,还会嘀咕别人装什么装,但是一旦自己掌握,啧啧啧,一发不可收拾,可谓真香。

语法糖(Syntactic sugar):

  • 计算机语言中特殊的某种语法
  • 这种语法对语言的功能并没有影响
  • 对于程序员有更好的易用性
  • 能够增加程序的可读性
  • 简而言之,语法糖就是程序语言中提供[]的一种手段和方式而已。 通过这类方式编写出来的代码,即好看又好用,好似糖一般的语法。固美其名曰:语法糖

一、数据结构

这里主要介绍常用语语法糖的数据结构,熟悉的小伙伴可以跳过。

序列类型

在序列中元素类型可以不同,通过下标访问元素。

字符串类型、列表类型、元组类型都属于序列。

在这里插入图片描述
在这里插入图片描述

序列类型是双向索引,如上图所示。

序列类型常用的操作:

在这里插入图片描述
在这里插入图片描述

序列类型的函数与方法:

在这里插入图片描述
在这里插入图片描述

下面介绍元组类型

元组类型是序列类型的一种扩展,但是元组一旦创建就不能修改,元组使用 ()或者tuple()创建。

接下来是列表类型,列表类型可谓是最常用的一种数据结构,该序列创建之后可以随意修改,使用[]或者list()创建,列表类型特有的函数和方法如下:

在这里插入图片描述
在这里插入图片描述

值得一提的是列表中使用 [::-1] 表示反转字符串。

集合类型

集合是多个元素的无序组合,特点是元素不重复。创建使用 {} 或者 set() ;

在这里插入图片描述
在这里插入图片描述

集合操作符:

在这里插入图片描述
在这里插入图片描述

集合中常用的方法与函数:

在这里插入图片描述
在这里插入图片描述

字典类型

字典类型相当于 java 中的 Map ,即映射关系类型的数据结构:

使用{}dict()创建,使用冒号:表示键值关系。

在这里插入图片描述
在这里插入图片描述

二、语法糖

先说一个实用的技巧,就是字符串类型和列表类型互相转换的几种方法:

  • 首先是字符串类型到列表类型,使用list() 或者split()
  • 然后是列表转字符串:如果列表元素都为字符串可以使用"".join(ls),如果不全是则使用map(str,ls)然后再join
代码语言:javascript
复制
//交换数字
a, b = b, a
//表示从b和c取一个较大的值赋值给a
a = [b, c][c > b]
代码语言:javascript
复制
// 我们希望把正的放前面,负的放后面,并且分别按绝对值从小到大
lst = [1, -2, 10, -12, -4, -5, 9, 2]
// 这样即可
lst.sort(key=lambda x: (x < 0, abs(x)))
代码语言:javascript
复制
// Lambda 表达式
f=lambda x:x+1
// 

关于列表的列表推导式:

代码语言:javascript
复制
// 生成奇数序列
l=[2*x+1 for x in range(10)]

for 的嵌套

代码语言:javascript
复制
[(x,y) for x in range(3) for y in range(3)]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

还可以使用 if 语句:

代码语言:javascript
复制
new_list = [expression(i) for i in old_list if condition(i)]

不过可读性极差,让别人来阅读你的代码是很痛苦的一件事。

三、函数语法

三大函数,很有用:

代码语言:javascript
复制
filter,map,reduce

首先是 filter 函数,filter 函数接受两个参数,第一个是过滤函数,第二个是可遍历的对象,用于选择出所有满足过滤条件的元素,返回一个可迭代对象。

代码语言:javascript
复制
// 去除小写字母
s=filter(lambda x:not str(x).islower(),"asdasfAsfBsdfC")

map函数接受的参数类型与filter类似,它用于把函数作用于可遍历对象的每一个元素。类似于数学中映射的概念。

代码语言:javascript
复制
// 求y=2x+1
s=map(lambda x:2*x+1,range(6))

reduce 函数对每个元素作累计操作,它接受的第一个参数必须是有两个参数的函数。

代码语言:javascript
复制
// 求和
from functools import reduce
s=reduce(lambda x,y:x+y,range(1,6))

元组拆包:

代码语言:javascript
复制
t=(1,2,3)
x,y,z=t

当然还有很多语法糖,欢迎留言补充。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、数据结构
    • 序列类型
      • 集合类型
        • 字典类型
        • 二、语法糖
        • 三、函数语法
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档