python语法糖是什么意思_Python中的甜蜜语法糖,甜甜的

2023-05-16

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

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

语法糖(Syntactic sugar):

计算机语言中特殊的某种语法

这种语法对语言的功能并没有影响

对于程序员有更好的易用性

能够增加程序的可读性

简而言之,语法糖就是程序语言中提供[]的一种手段和方式而已。 通过这类方式编写出来的代码,即好看又好用,好似糖一般的语法。固美其名曰:语法糖

一、数据结构

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

序列类型

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

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

18ba8feb0f0a5d62d68bf6c97f0e1b9d.png

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

序列类型常用的操作:

88cd9711b19cd386eb1240e7315ad697.png

序列类型的函数与方法:

52e3899257819a40ce2d86cc8a6c4249.png

下面介绍

元组类型

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

()

或者

tuple()

创建。

接下来是

列表类型

,列表类型可谓是最常用的一种数据结构,该序列创建之后可以随意修改,使用

[]

或者

list()

创建,列表类型特有的函数和方法如下:

0f83b0c5a09a50fe2525870ad9d18a50.png

值得一提的是列表中使用

[::-1]

表示反转字符串。

集合类型

集合是多个元素的无序组合,特点是元素不重复。创建使用

{}

或者

set()

;

a3d68b1b4c87d713877e996650611ed8.png

集合操作符:

44f822102b83574913fe357048008cd5.png

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

77010c4e1867edee6c9afe6dd2929cf4.png

字典类型

字典类型相当于

java

中的

Map

,即映射关系类型的数据结构:

使用

{}

dict()

创建,使用冒号

:

表示键值关系。

d370299ee5272c02fc447b95e51510ce.png

二、语法糖

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

首先是字符串类型到列表类型,使用

list()

或者

split()

然后是列表转字符串:如果列表元素都为字符串可以使用

"".join(ls)

,如果不全是则使用

map(str,ls)

然后再

join

//交换数字

a, b = b, a

//表示从b和c取一个较大的值赋值给a

a = [b, c][c > b]

// 我们希望把正的放前面,负的放后面,并且分别按绝对值从小到大

lst = [1, -2, 10, -12, -4, -5, 9, 2]

// 这样即可

lst.sort(key=lambda x: (x < 0, abs(x)))

// Lambda 表达式

f=lambda x:x+1

//

关于列表的列表推导式:

// 生成奇数序列

l=[2*x+1 for x in range(10)]

for 的嵌套

[(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 语句:

new_list = [expression(i) for i in old_list if condition(i)]

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

三、函数语法

三大函数,很有用:

filter,map,reduce

首先是

filter

函数,

filter

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

// 去除小写字母

s=filter(lambda x:not str(x).islower(),"asdasfAsfBsdfC")

map

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

// 求y=2x+1

s=map(lambda x:2*x+1,range(6))

reduce

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

// 求和

from functools import reduce

s=reduce(lambda x,y:x+y,range(1,6))

元组拆包:

t=(1,2,3)

x,y,z=t

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

参考链接:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python语法糖是什么意思_Python中的甜蜜语法糖,甜甜的 的相关文章

  • celery任务eta已关闭,使用rabbitmq

    我使用教程中的默认设置和在 ubuntu 上运行的rabbitmq 使 Celery 任务正常进行 当我毫不延迟地安排任务时 一切都很好 但是当我给他们一个预计时间时 他们会被安排在未来 就好像我的时钟在某个地方关闭了一样 下面是一些请求任
  • 在 SQLAlchemy 中,过滤器是在连接之前还是之后应用?

    使用 SQLAlchemy 我执行如下查询 import models as m import sqlalchemy as sa s session maker q s query m ShareCount m Article join m
  • 有什么好的适用于 Google App Engine 应用程序的 AJAX 框架吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试在我的 Google App Engine 应用程序中实现 AJAX 因此我正在寻找一个好的
  • pandas read_csv 之前预处理数据文件

    我使用 SAP 的数据输出 但它既不是 CSV 因为它不引用包含其分隔符的字符串 也不是固定宽度 因为它具有多字节字符 它是一种 固定宽度 字符 为了将其放入 pandas 我当前读取文件 获取分隔符位置 对分隔符周围的每一行进行切片 然后
  • 创建 xyz 海拔数据的曲面图

    我正在尝试用 python 创建一座山的表面图 其中我有一些 xyz 数据 最终结果应该类似于that https i stack imgur com rKQV0 png 该文件的格式如下 616000 0 90500 0 3096 712
  • 在Python中将大文件(25k条目)加载到dict中很慢?

    我有一个大约有 25000 行的文件 它是 s19 格式的文件 每行就像 S214780010 00802000000010000000000A508CC78C 像这样的事情怎么样 我做了一个测试文件 只有一行S21478001000802
  • 我可以同时打开两个 Tkinter Windows 吗?

    可以同时打开2个窗口吗 import tkinter as Tk import random import math root Tk Tk canvas Tk Canvas root background image Tk PhotoIma
  • 如何在plotly(python)中的刻度标签和图形之间添加空格?

    如果我使用绘图创建水平条形图 则每个条形的标签都与图表相对应 我想在标签和图表之间添加一些空间 填充 边距 我怎样才能做到这一点 Example import plotly offline as py import plotly graph
  • 无法使用Python请求会话模块登录网站

    我刚刚开始进行网络抓取 对于我的第一个项目 我尝试使用 requests Session 登录 artofproblemsolving com 并访问另一个用户的帐户 这是我的代码 import requests LOGIN URL htt
  • Python Apache Beam 端输入断言错误

    我对 Apache Beam Cloud Dataflow 还很陌生 所以如果我的理解不正确 我深表歉意 我正在尝试通过管道读取大约 30 000 行长的数据文件 我的简单管道首先从 GCS 打开 csv 从数据中提取标题 通过 ParDo
  • 对法语文本进行词形还原[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一些法语文本需要以某种方式进行处理 为此 我需要 首先 将文本标记为单词 然后对这些单词进行词形还原以避免多次处理相同的词根 据我
  • 如何在 python 中使用交叉验证执行 GridSearchCV

    我正在执行超参数调整RandomForest如下使用GridSearchCV X np array df features all features y np array df gold standard labels x train x
  • 机器学习的周期性数据(例如度角 -> 179 与 -179 相差 2)

    我使用 Python 进行核密度估计 并使用高斯混合模型对多维数据样本的可能性进行排名 每一条数据都是一个角度 我不确定如何处理机器学习的角度数据的周期性 首先 我通过添加 360 来删除所有负角 因此所有负角都变成了正角 179 变成了
  • 在python中使用编解码器utf-8打开文件错误

    我在 windows xp 和 python 2 6 4 上执行以下代码 但它显示 IOError 如何打开名称带有 utf 8 编解码器的文件 gt gt gt open unicode txt euc kr encode utf 8 T
  • 将 str.contains 映射到 pandas DataFrame

    python 初学者 我正在寻找创建字符串的字典映射以及关联的值 我有一个数据框 想要创建一个新列 如果字符串匹配 则会将该列标记为 x df pd DataFrame comp dell notebook dell notebook S3
  • 如何将Python包从旧版本安装到新版本?

    我正在使用 python 3 7 最近在 Linux 中安装了 python 3 8 是否有任何 bash 命令或脚本可以获取 3 7 的所有软件包列表并在 3 8 版本中一一安装 我想避免每个包裹都手工完成 注意 我将它们安装在我的系统中
  • 如何仅读取 CSV 文件每行的第一列 [重复]

    这个问题在这里已经有答案了 如何在Python中读取CSV文件每行的第一列 我的数据是这样的 1 abc 2 bcd 3 cde 我只需要循环第一列的值 另外 当我在 calc 中打开 csv 文件时 每行中的数据都在同一个单元格中 这正常
  • 如何使用 keras.backend.gradients() 获取梯度值

    我试图获得 Keras 模型的输出相对于模型输入 x 而不是权重 的导数 似乎最简单的方法是使用 keras backend 中的 梯度 它返回梯度张量 https keras io backend https keras io backe
  • 如何在不同的目录中执行python脚本?

    Solved对于可能觉得这有帮助的人 请参阅下面我的答案 我有两个脚本 a py 和 b py 在我当前的目录 C Users MyName Desktop MAIN 中 我运行 gt python a py 第一个脚本 a py 在我当前
  • 美丽的汤刮 - 登录凭据不起作用

    尝试使用登录凭据抓取页面 payload email gmail com password urls login url https www spotrac com signin url https www spotrac com nba

随机推荐