【python】python语法糖

2023-05-16

python 语法糖

1. 什么是语法糖🍬

语法糖是由编程语言提供的一种可以让我们写出来的代码在不影响语句执行的功能的条件下,能够让我们的代码看起来更简洁和美观的一种语法。

很多人刚开始接触语法糖的时候,总会说这样一句:“最讨厌语法糖,不好好说话”,当学会使用了语法糖之后:
在这里插入图片描述

要说语法糖这东西,其实可以联想到C语言大神,能把宏定义玩出花来,被玩出花来的宏我愿称之为自创语法糖。

2. 经典的 a 和 b

当我们需要交换两个数字的值的时候,相信很多人都写过这句代码

a, b = 10, 20
t = a
a = b
b = t
print(a, b)

python给我们提供了一种交换a 和 b的值的语法糖

a, b = 10, 20
a, b = b, a
print(a, b)

程序输出为:

20 10

实际上,在python内部,这句a, b = b, a在使用了之后,内存空间的变化如下:

刚开始:
在这里插入图片描述

交换后:
在这里插入图片描述

学习C语言指针从入门到入坟的人:DNA动了😂

3. 数字用下划线间隔

当我们需要一个很大很大的整数的时候,比如一百亿,我们采用以下写法

>>> a = 10000000000
>>> a
10000000000

啊,个,十,百,千,万,十万,百万,千万,亿,十亿,百亿……

这里可以使用科学计数法,但是还有另外一种方法让我们看清这个数字更加的容易,当然,记不住千,百万,亿……等跳跃性单位的人还是要一个一个数的,只是变得好数了一点。

>>> a = 10_000_000_000
>>> a
10000000000

使用下划线可以在编写数字的时候把数字划分开,方便我们阅读(悦读)

4. 数字大小的比较

当我们需要判断一个学生的成绩在80到90,学生的成绩为良的时候,在某些语言中,我们需要这么写:

在这里插入图片描述

if (grade >= 80 && grade < 90)
{
    printf("%s\n","good");
    //cout << "good" << endl;
}

这判断条件看的眼睛都花了,,

python就比较善解人意了,只需要这样写,和我们做数学题的时候表示区间范围一模一样~简单易懂

if 80 <= grade < 90:
    print('良')

除了以上这个,我们在判断很多变量之间的大小关系的时候,再也不用两两比对了,而是可以写为下面这种:

>>> x = 1
>>> y = 2
>>> z = 3
>>> n = 4
>>> m = 5
>>> if x < y < z < n < m:
	print('life is short, we need python!')

程序输出为:

life is short, we need python!

5. 列表相加

我们有两个列表,现在我们需要把两个列表合并,按照传统的某些语言的写法,我们需要一个一个元素挪,但是python不用,我们直接相加就好

>>> lis1 = [1, 2, 3, 4, 5]
>>> lis2 = [6, 7, 8, 9, 0]
>>> print(lis1 + lis2)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

我测试过元组,也可以输出结果,但是元组属于不可更改对象,所以不建议元组相加。

6. 列表切片

现在我们拥有一个列表,我们需要把列表中的一块内容取下,按照某些编程语言的逻辑,我们需要得到需要的内容的首元素下标和截至元素的下标,然后使用一个循环获取,不难,但是麻烦,python就提供了列表切片的语法,字符串,元组也同样适用

>>> list1 = [2, 4, 6, 8, 10]
>>> list1[:5]
[2, 4, 6, 8, 10]
>>> list1[3:5]
[8, 10]
>>> list1[1:4]
[4, 6, 8]

我们可以在中括号内输入我们获取的列表中的元素的首地址和截至元素的地址,切片语法有几个重点

  • list[start : end]获取我们需要的范围
  • start默认为0,end 默认为列表的长度
  • 切片的区间为左闭右开区间,也就是list[start]能够取到,list[end]不能取到

7. 三元表达式

当我们使用C/C++语法的时候需要写if-else 语句的时候,我们可以使用三元表达式替换if-else语句,

int a;
int b;
int max;
if (a > b) {
    max = a;
} else {
    max = b;
}

这里是简单的三元表达式,当我们使用C/C++中的三元运算符简化的时候

int a;
int b;
int max;
max = a > b ? a : b;//等价以上的if-else语句

python也提供相似的功能

_max = a if a > b else b

三元表达式语法可以表达为:

结果 = 选项一 if 条件 else 选项二

如果条件为真选前面的, 如果条件为假选后面的那个

8. 元素的打包和解包

当我们有一个元组,里面用来存一个空间中的坐标,比如:

(1, 3, 5)

现在我们需要把三个元素拿出来,一般的写法是:

>>> zi = (1, 3, 5)
>>> x = zi[0]
>>> y = zi[1]
>>> z = zi[2]
>>> x, y, z
(1, 3, 5)

其实不用,我们只需要这样写

>>> x, y, z = zi
>>> x
1
>>> y
3
>>> z
5
>>> 

用这种方法匹配一个元组,我们用来直接匹配的数字和元组元素的数量一定要一模一样,多了少了都不行,同样,列表也同样可以一键匹配,并且反向打包也可以

#接上
>>> lis = x, y, z
>>> lis
(1, 3, 5)

9. 列表推导式

列表推导式应该是所有语法糖中最常用的了,甚至我们还能在列表推导式后面加判断条件

>>> list2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list3 = [x for x in list2]
>>> list3
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list4 = [x for x in list2 if x % 2 == 0]#加判断条件
>>> list4
[2, 4, 6, 8]

虽然叫做列表推导式,但是我们集合,字典也能够使用

集合:

>>> list2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> set1 = {x for x in list2}
>>> set1
{1, 2, 3, 4, 5, 6, 7, 8, 9}

字典:

>>> list2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> dict1 = {i : i + 100 for i in list2 if i % 2 == 0}
>>> dict1
{2: 102, 4: 104, 6: 106, 8: 108}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【python】python语法糖 的相关文章

  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • 基于代理的模拟:性能问题:Python vs NetLogo & Repast

    我正在 Python 3 中复制一小段 Sugarscape 代理模拟模型 我发现我的代码的性能比 NetLogo 慢约 3 倍 这可能是我的代码的问题 还是Python的固有限制 显然 这只是代码的一个片段 但 Python 却花费了三分
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class

随机推荐

  • idea2020创建maven javaweb项目并运行 示例

    idea2020创建maven javaweb项目并运行 一 项目的创建二 pom xml简单介绍三 添加tomcat插件以方便运行项目1 在pom xml文件里加入以下配置 四 创建servlet并 运行项目1 创建Java文件夹并在文件
  • C++实现算法服务的一些经验总结

    文章目录 一 算法模型调用的几种方式二 python算法服务的优缺点三 C 43 43 算法服务的优缺点四 C 43 43 算法服务的几种实现方式五 C 43 43 基于http的算法服务实现思路六 记录调用 xff1a 日志 数据库七 性
  • Java中使用jedis操作redis(使用maven)

    jedis的使用 前言一 简单使用示例1 快速入门2 操作五种数据格式 二 jedis连接池 xff1a jedisPool1 示例2 jedies详细配置 三 创建连接池工具类1 jedis properties2 JediesPoolU
  • maven中使用jdbc

    用到的有数据库连接池 JDBCTemplate 一 首先导入jar包 lt mysql驱动 xff0c 使用对应版本jar包依赖 gt lt dependency gt lt groupId gt mysql lt groupId gt l
  • 解决风扇狂转不止的好方法

    这两天风扇狂转不止 xff0c 真让我头疼 xff0c 现在弄好了 安装一个软件 软件官网 我的是thinkpade580 xff0c 对其他电脑生不生效我不清楚 xff08 但可以一试 xff09 下载后直接安装即可 有个地方实时显示着温
  • 安装hadoop3.x版本踩坑

    报错 xff1a ERROR Attempting to operate on hdfs namenode as root ERROR but there is no HDFS NAMENODE USER defined Aborting
  • 报错:Description: No bean of type ‘org.apache.shiro.realm.Realm‘ found

    springboot整合shiro的时候出现了报错 报错信息 xff1a Description No bean of type 39 org apache shiro realm Realm 39 found Action Please
  • 计算机网络课后习题概略

    计算机网络 课后习题 第一章 概述 1 01 计算机网络可以向用户提供哪些服务 xff1f 服务功能或作用数据传输网络间个计算机之间互相进行信息的传递 资源共享进入网络的用户可以对网络中的数据 软件和硬件实现共享 分布处理功能通过网络可以把
  • Kittle案例(Excel输入,生成记录,生成随机数,获取系统信息,排序记录,去除重复记录,替换NULL值)

    一 Excel输入 1 创建转换 将要处理的文件保存到Excel表中 xff0c 然后打开kettle创建一个转换并命名 xff0c 拖入 Excel输入 控件 2 配置Excel输入控件 浏览导入Excel文件 单击 浏览 B 按钮 xf
  • 第七章 数据加载

    一 全量加载 从技术角度来说 xff0c 全量加载比增量加载的操作要简单很多 xff0c 即只需要在数据加载之前 xff0c 将目标数据表进行清空 xff0c 再将源数据表中的数据全部加载到目标表中 案例实现 xff1a 数据装备 xff1
  • 第八章 综合案例——构建DVD租赁商店数据仓库(1)

    一 加载日期数据至日期维度表 操作介绍 xff1a 下面通过Kettle工具加载日期数据至dim date日期维度表 1 打开Kettle工具 xff0c 创建转换 使用Kettle工具 xff0c 创建一个转换load dim date
  • 第八章 综合案例——构建DVD租赁商店数据仓库(2)

    一 加载用户数据至用户维度表 操作介绍 xff1a 通过Kettle工具加载用户数据至用户维度表dim customer 1 打开Kettle工具 xff0c 创建转换load dim customer 使用Kettle工具 xff0c 创
  • C++与python交互库-pybind11的返回值策略 return_value_policy

    pybind11的返回值策略 return value policy 一 返回值策略的必要性二 一个导致crash的例子三 所有的返回值策略的探讨四 补充说明 一 返回值策略的必要性 C 43 43 和python使用根本上就不一样的内存管
  • 第八章 综合案例——构建DVD租赁商店数据仓库(3)

    一 加载演员数据至演员维度表 操作介绍 xff1a 通过Kettle工具加载演员数据至演员维度表dim actor 1 打开Kettle工具 xff0c 创建转换 使用Kettle工具 xff0c 创建一个转换load dim actor
  • 树莓派4b安装python库

    树莓派4b安装python库 树莓派安装好系统后自带的有python2和python3 xff0c 默认是使用python2 xff0c 可以打开树莓派查看 xff1a 输入python 查看默认的python版本 xff1a 我原来默认是
  • SONIC+P4

    SONIC简介 背景 微软于2015年先后发表了SAI和SONIC SONIC产业日益繁荣 xff0c 已超过六十家 创新 SONiC使用了大量现有的开源技术 xff1a Docker Redis Quagga和LLDPD以及自动化配置工具
  • 6.ROS&PX4--Pixhawk无人机+A1激光雷达SLAM部署

    6 ROS amp PX4 无人机A1激光雷达SLAM部署 一 常见2D SLAM算法 Gmapping Hector SLAM Cartographer Gmapping 基于粒子滤波的2D激光雷达SLAM xff0c 构建二维栅格地图
  • Codeblock提示: Can‘t find compiler executable in your configured search path‘s for GNU GCC无法找到编译器

    can t find compiler executable in your configured search path s for GUN GCC Complier的应对办法 今天使用codeblocks 点击Settings Comp
  • Hexo系列 | Hexo安装、启动

    目录 前言 一 Hexo是什么 二 安装node js 三 安装Git 四 检查是否安装成功 五 Hexo安装 启动 前言 用Hexo框架搭建个人博客 xff0c 记录搭建过程 个人博客效果 一 Hexo是什么 Hexo官网 Hexo 是一
  • 【python】python语法糖

    python 语法糖 1 什么是语法糖 x1f36c 语法糖是由编程语言提供的一种可以让我们写出来的代码在不影响语句执行的功能的条件下 xff0c 能够让我们的代码看起来更简洁和美观的一种语法 很多人刚开始接触语法糖的时候 xff0c 总会