Python语法糖系列

article/2025/9/17 21:29:38

语法糖说明

语法糖(Syntactic sugar):计算机语言中特殊的某种语法这种语法对语言的功能并没有影响对于程序员有更好的易用性能够增加程序的可读性

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

一个简单的例子

假设:有2个数字,现需要从中得到最大的那个数字。如何实现?


b = 2 
c = 3if b > c:a = b
else:a = c

其实还有更多的其它实现方式:

a = max(b, c)
a = c > b and c or b
a = c if c > b else b
a = [b, c][c > b]

这些都是可以实现我们需求的方法,殊途同归。但是它们在易用性、简洁性、可读性、性能等方面的表现都不一样。那么问题来了!

哪个才是我们所说的语法糖呢?

一些常见的语法糖

a = 1; b = 2; c = 3
b, c = c, b
a < c < b < 5
'1' * 100
[1,2,3,4] + [5,6,7,8]

可以看到这些语法,在其它语言里通常不会出现的。但是在Python中却神奇的被支持了,所以这些都是当之无愧的Python语法糖。

切片操作

像列表这类可以支持**切片**操作的对象,则是我最初喜欢Python的一个非常重要的原因。

l = [1, 2, 3, 4, 5]
l[2]
l[:3]
l[3:]
l[2:4]
l[:-1]
l[:]
l[::2]

with语法糖

with语法糖实现的是一个上下文管理器,它主要的特点就是帮助我们自动管理上下文的衔接。即在需要的时候传给我们,不需要的时候自动关闭上下文对象。 需要注意的是:使用with语法糖是有条件的。即其后跟的对象必须要实现__enter__和__exit__这2个魔法属性。具体使用的例子如下:

with open('example_2.txt', 'r', encoding='utf-8') as f:for line in f:print(line, end='')

else语法糖

Python中提供一类else的语法,它可以在原有语法基础之上,支持更多一种情况的选择。 主要有for-else,while-else,try-else。需要注意的是,for-else和while-else需要和break语句配合时使用。

for else

for i in range(1):print(i)break
else:print('for end')

while else

i = 1
while i:print(i)i -= 1break
else:print('while end')

try else

try:1 / 1
except Exception as e:print('except occured')
else:print('it is fine')
finally:print('i am finally')

函数相关语法糖

Python中函数我们都非常的熟悉,而在函数的使用上却有着与其它语言不同的选择。

动态参数

def example_dynamic_args(*args, **kwargs):'''动态参数'''print(args)print(kwargs)

这个函数的参数与函数相比,其参数会有些不同之处。因为它们在接收参数时使用了不同方式。

example_dynamic_args(1,'2', True, name='xiaowu', age=18)
l = [1,'2',False]
d = {'name': 'xiaoming', age: '16'}
example_dynamic_args(*l, **d)

匿名函数

匿名函数在很多的语言中都存在,通常在临时需要一个函数的场景下使用。

lambda x: x * 2

Python中使用lambda表达式来实现匿名函数,观察上面的lambda表达式。其特点如下:

  • 可以接受函数

  • 函数体只有一个表达式

  • 无需显式的return语句

  • 整个表达式在一个语法行内实现

值得注意的是,lambda表达式除了一些语法上的限制之外;其它函数该有的特性它都有。比如:支持动态参数。下面是一个使用lambda表示的场景:

in_dict = {'a': 10, 'b': 2, 'c': 3}
print('in_dict:', in_dict)
out_dict = sorted(in_dict.items(), key=lambda x: x[1])
print('out_dict', out_dict)

推导表达式

推导表达式是Python中常见的语法糖,在很多的数据处理场景中,我们可能会使用的到。 最常见的就是列表推导表达式,可以用来过滤、处理列表中的子项并输出一个新的列表。除此之外还有几个推导式也是非常好用的。

列表推导表达式

in_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7]
print('array before:', in_list)
array = [i for i in in_list if i % 2 != 0] # 列表推导表达式
print('array after:', array)

生成器推导表达式

in_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7]
print('array before:', in_list)
array = (i for i in in_list if i % 2 != 0) # 生成器推导表达式
print('array after:', array)

集合推导表达式

in_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7]
print('array before:', in_list)
array = {i for i in in_list if i % 2 != 0} # 集合推导表达式
print('array after:', array)

字典推导表达式

in_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7]
print('array before:', in_list)
array = {i: i * 2 for i in in_list if i % 2 != 0}  # 字典推导表达式
print('array after:', array)

不同推导式在语法使用上基本一致,只是在返回对象的类型上有所差别。

yield表达式

yield语法也是Python中比较有特点的语法糖,可以说是特有的。虽然其它语言有实现类似机制的功能。 yield是Python中实现**协程(coroutine)**的一个重要基础。

def example_generator(in_list):'''生成器'''for i in in_list:yield i * 2

装饰器

重要的往往在最后面,装饰器是学习Python绕不过去的坎。就像学习Java要理解面向对象和设计模式一样。 学习Python,你就应该要掌握好闭包、生成器、装饰器等相关知识。而对于编写高并发程序时则要掌握协程相关知识。

def example_decorator(func):'''装饰器'''def inner():func()return inner

更多学习

  • Python装饰器详解
  • Python多线程GIL
  • Python魔法属性
  • Python语法糖

学习更多关于Python和测试相关的技术,请扫码下面的二维码哦!!!


http://chatgpt.dhexx.cn/article/gr2lRLg2.shtml

相关文章

什么是语法糖?Java中有哪些语法糖?

本文从 Java 编译原理角度&#xff0c;深入字节码及 class 文件&#xff0c;抽丝剥茧&#xff0c;了解 Java 中的语法糖原理及用法&#xff0c;帮助大家在学会如何使用 Java 语法糖的同时&#xff0c;了解这些语法糖背后的原理 1 语法糖 语法糖&#xff08;Syntactic Sugar&…

不了解这12个语法糖,别说你会Java!

阅读本文大概需要 10 分钟。 作者:Hollis 本文从 Java 编译原理角度,深入字节码及 class 文件,抽丝剥茧,了解 Java 中的语法糖原理及用法,帮助大家在学会如何使用 Java 语法糖的同时,了解这些语法糖背后的原理 语法糖 语法糖(Syntactic Sugar),也称糖衣语法,是由英…

什么是语法糖(Syntactic sugar)?

大学时没选修编译原理这门课&#xff0c;不知道什么是语法糖&#xff0c;最近看React的官方文档才接触语法糖的概念&#xff0c;简单查了下资料记录下&#xff0c;以下是来自百度百科的解释&#xff1a; 语法糖&#xff08;Syntactic sugar&#xff09;&#xff0c;也译为糖衣语…

el-steps分布展示页面

<template><div class"app-container automation"><el-steps :active"active" finish-status"success"><el-step title"步骤 1"></el-step><el-step title"步骤 2"></el-step>&l…

038_Steps步骤条

1. Steps步骤条 1.1. Steps步骤条引导用户按照流程完成任务的分步导航条, 可根据实际应用场景设定步骤, 步骤不得少于2步。 1.2. Steps Attributes 参数 说明 类型 可选值 默认值 space 每个step的间距, 不填写将自适应间距。支持百分比。 number / string 无 无 d…

更改el-steps颜色样式

原样式&#xff1a; 目标样式如下&#xff0c;也不追求完全一致&#xff0c;至少得看得过去。 <style scoped>::v-deep .el-step__head.is-success {color: rgb(52, 158, 250);border-color: rgb(52, 158, 250); } ::v-deep .el-step__title.is-success {font-weight: …

vue使用steps步骤条,自定义内容

效果图 一、引入element ui steps <el-steps :active"caseHistoryData.length" finish-status"success" direction"vertical" ><el-step><template slot"description"></template></el-step> </el-…

steps.js 步骤条、时间轴

GitHub地址&#xff1a;https://github.com/fxss5201/steps 介绍 首先看一下目录&#xff1a; 1.0 文件夹和 2.0 文件夹非升级关系&#xff0c;两者仅是着重点方向不一致&#xff0c;1.0 主打双边显示&#xff0c;2.0 主打内容排序&#xff0c;一般功能的话两者均可满足。 …

CSS3中steps()动画的详解

原文作者&#xff1a;Joni Trythall 增修作者&#xff1a;Fegmaybe 一个是雪碧图的实现动画的steps效果。steps&#xff08;&#xff09;阶跃函数&#xff0c;是transition-timing-function和animation-timing-function两个属性的属性值&#xff0c;他是表示两个关键帧之间的动…

css【详解】steps()函数

steps(number, position)number 整数值&#xff0c;表示把动画分成了多少段。position 可选参数&#xff0c;表示动画跳跃执行是在时间段的开始还是结束。 —— start 在时间段的开头处跳跃 —— end 在时间段的结束处跳跃 动画效果见 https://demo.cssworld.cn/new/5/4-7.php…

steps函数--参数意思和用法

图片解释如下&#xff0c;参数意思和用法在代码的注释中 所引用图片共7帧&#xff0c;如下&#xff1a; 尺寸为200*1400&#xff0c;所以设置div为200*200&#xff0c;分为7帧&#xff0c;除去展示帧&#xff0c;需六次步骤跳转&#xff0c;原图如下&#xff1a; 代码&…

element的步骤条整合表单(steps+form)

先上效果图&#xff1a; element ui 组件库官网 使用步骤&#xff1a; 1、页面组合步骤 > 5步 定义出4个步骤&#xff08;看你自己需要几步&#xff09;定义form表单定义4个盒子对象active属性 > 1 到 4放置表单项设置上一步和下一步的按钮 <template>//第一步…

vue、Steps 步骤条、Steps 属性、vue Steps 所有步骤条样式、vue Steps 步骤条全部属性

vue、Steps 步骤条、Steps 属性、vue Steps 所有步骤条样式、vue Steps 步骤条全部属性 设计规则何时使用 代码演示1.基本用法2.迷你版3.带图标的步骤条4.步骤切换5.竖直方向的步骤条6.竖直方向的小型步骤条7.步骤运行错误8.点状步骤条9.自定义点状步骤条 APIStepsSteps.Step 设…

组件封装 - steps组件

首先, 我先来看看效果 steps 组件的封装和 tabs 组件还是相似的 都会去指定两个组件来完成(仿Element UI), 都会去使用 jsx 的语法 让其中一个组件去规定样式和排版, 另外一个组件去接收父组件传入的动态数据 但和面包屑组件还是有区别的(面包屑组件封装): 相同点都是使用两…

ElementUi Steps 步骤条的使用

效果&#xff1a; 实现&#xff1a; <el-steps :active"active" finish-status"success"><el-step title"步骤 1"></el-step><el-step title"步骤 2"></el-step><el-step title"步骤 3"&…

el-steps(步骤条)的入门学习

el-steps(步骤条)的入门学习 适用场景 在有步骤流程的情况下&#xff0c;可以设置步骤条&#xff0c;引导用户向下操作&#xff0c;如四六级的报考 知识点 el-steps嵌套el-step使用el-steps的active设置Number&#xff0c;从零开始el-steps的space设置Number&#xff0c;为…

Vue2步骤条(Steps)

Vue3步骤条&#xff08;Steps&#xff09; 可自定义设置以下属性&#xff1a; 步骤标题数组&#xff08;stepsLabel&#xff09;步骤描述数组&#xff08;stepsDesc&#xff09;步骤总数&#xff08;totalSteps&#xff09;&#xff0c;默认3当前选中的步骤&#xff08;curren…

Vue3步骤条(Steps)

Vue2步骤条&#xff08;Steps&#xff09; 可自定义设置以下属性&#xff1a; 步骤数组&#xff08;steps&#xff09;&#xff0c;类型&#xff1a;Array<{title?: string, description?: string}>&#xff0c;默认 [] 当前选中的步骤&#xff0c;设置 v-model 后&a…

CSS3动画——steps函数

CSS3动画中应用的定时函数&#xff08;timing function&#xff09;常用的有内置关键字linear, ease, ease-in, ease-out, ease-in-out, step-start, step-end&#xff0c;另外还有两个内置的缓动函数cubic-bezier(), steps() 其中steps()这个函数是将整个动画过程分为指定的步…

css3中animation的steps分步动画

css的animation中&#xff0c;有一种描述动画变化速率的东西&#xff0c;例如常见的linear,ease-in,ease-out等&#xff0c;这些都是连续的变化&#xff0c;还有一种叫做steps的&#xff0c;它用来描述一种不连续的动画&#xff0c;也就是逐帧动画。 基本认识 steps的格式为&…