目录
定义及意义
示例
赋值
索引与切片
条件表达式
map() 函数
with open()
format() 函数
匿名函数 lambda
推导式
今天自学时听老师讲到“语法糖”,有点儿迷茫,赶紧忍住口水滴答的冲动,向度娘请教。
语法糖(Syntactic sugar),也译为糖衣语法,由英国计算机科学家彼得·约翰·兰达发明的一个术语,指计算机语言中添加的某种语法。这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。
之所以叫“语法”糖,不只是因为加糖后的代码功能与加糖前保持一致,更重要的是,糖在不改变其所在位置的语法结构的前提下,实现了运行时的等价。可以简单理解为,加糖后的代码编译后跟加糖前一致。
之所以叫语法“糖”,是因为加糖后的代码写起来更爽,包括但不限于:代码更简洁流畅,代码更语义自然……写着爽,看着爽,就像吃了糖。
有人将语法糖归类为奇技淫巧,需要声明的是,“语法糖”这个词绝非贬义,它不是糖衣炮弹,更不是口蜜腹剑,它可以给编码带来实实在在的方便,也可以实实在在提高编码的效率,更重要的,在性能上也不会带来损失。
可见,语法糖是约定俗成的,为编译器所认可的,可以带来方便快捷的,编程语法。一定程度上而言,语法糖可以呈现于书本,流通于码界,也可以诞生于指尖。窃以为,能够带来编码便利的语法,皆可称为糖。
Python 中语法糖随处可见,宛如汉语中的成语和诗词,浩如星海,不胜枚举。本文仅取沧海数粟,供学习参考。
a, b = b, a
a, b, c = 1, 2, 3
索引和切片是 python 序列的拿手好戏,应用广泛。
详见:Python 切片 [-1:],[:-1] 和 [::-1] 之理解适用序列的索引和切片操作https://blog.csdn.net/iprobobo/article/details/123456004
a if b else c
详见:Python 之条件表达式左?还是右?,true 是个问题https://blog.csdn.net/iprobobo/article/details/123537662
s = 'Shanghai'
l = list(map(str, s))
详见:Python map() 函数之举重若轻映射的魅力https://blog.csdn.net/iprobobo/article/details/122798133
with open(file_name, 'r', encoding='utf-8') as f:
print(f.read())
format() 函数常用于格式化字符串,功能非常强大。
>>> '{1:.2f}, {0:.3f}'.format(3.1415926, 0.61803)
'0.62, 3.142'
详见:Python 字符串格式化之 .format()信手拈来https://blog.csdn.net/iprobobo/article/details/123584069
lambda 是一个很有特点的关键字,python 利用其来来创建匿名函数,活用该函数可以轻易解决很多问题。
例如,将一个学校的学生(student)按年级(grade)、身高(height)逆序排列,只需要一行代码:
student.sort(key = lambda x: (['grade'], ['height']), reverse = True)
再如将列表(list)对象排序,要求正数居前,负数殿后,且绝对值从小到大:
>>> list = [1, -2, 3, -4, 5, -6, 7, -8]
>>> list.sort(key = lambda x: (x < 0, abs(x)))
>>> list
[1, 3, 5, 7, -2, -4, -6, -8]
详见:Python 匿名函数之 lambda解 lambda 之惑,有这一篇就够了https://blog.csdn.net/iprobobo/article/details/123591952
推导式是 Python 中常见的语法糖,其中最常见的为列表推导式,可用来过滤、处理列表中的子项并输出一个新的列表。
>>> a = [i for i in range(10) if i % 2 != 0]
>>> print(a)
[1, 3, 5, 7, 9]
详见:Python 之推导式常用的语法糖https://blog.csdn.net/iprobobo/article/details/123582135
……
还有很多很多语法糖,感兴趣的可以跟帖讨论