十大常见语法糖 Syntactic Sugar
常见的十种语法糖,用了你就会快乐。
当然很多可能你每天都在用了,只是不知道还有这么个专门称呼。
在 Python 等编程语言中,“语法糖”(Syntactic Sugar)是指那些使代码更容易读写的语法特性。
这些特性在没有它们的情况下,相同的功能仍然可以实现,只是可能更加复杂或者冗长。Python 有许多这样的语法糖,下面是一些例子:
# 将上述提到的 Python 语法糖示例代码放入一个代码单元中执行
# 1. 列表推导式
squares = [x**2 for x in range(10)]
#[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# 2. 字典推导式
square_dict = {x: x**2 for x in range(5)}
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
# 3. 集合推导式
square_set = {x**2 for x in [1, 2, 3]}
# {1, 4, 9}
# 4. 元组解包
a, b = (1, 2)
# (1, 2)
# 5. 链式比较
a = 0
chain_comparison = 1 < a < 10
# False
# 6. 带有默认值的函数参数
def func(arg, default_arg=5):
return arg + default_arg
func_result = func(3)
# 8
# 7. 三元运算符
condition = True
ternary = "Yes" if condition else "No"
# 'Yes'
# 8. 星号表达式
first, *middle, last = [1, 2, 3, 4, 5]
# (1, [2, 3, 4], 5),
# 9. 函数式编程工具: map + lambda 匿名函数
mapped_result = list(map(lambda x: x * 2, [1, 2, 3]))
# [2, 4, 6]
# 10. 生成器表达式
generator_sum = sum(x**2 for x in range(10))
# 285
生成器和迭代器
迭代器和生成器(迭代器的一种)是 Python 中非常重要的概念,它们紧密相关但又有一些区别。
**迭代器通俗解释:**想象你去了一个巨大的图书馆,里面有成千上万本书。迭代器就像是一个帮你从头到尾逐本查看每一本书的向导。在 Python 中,迭代器是一种对象,它可以帮助你逐个访问集合(比如列表或元组)中的元素,而不需要一次性把所有元素都加载到内存中。
**生成器(迭代器的一种)通俗解释:**想象你有一个魔法机器,每次你对它说“下一个”,它就会给你一个数字,但它不会一次把所有的数字都告诉你,而是每次你问的时候才给一个。这个机器就像是一个生成器。在 Python 中,生成器是一种特殊的代码结构,可以一次生成一个数据项,等到下次你需要的时候再生成下一个,这样可以节省内存,特别适合处理大量数据。
迭代器(Iterator)
迭代器是一个遵循迭代器协议的对象,即它支持两个方法:__iter__()
和 __next__()
。
__iter__()
方法返回迭代器对象本身。__next__()
方法返回容器的下一个元素。当没有更多元素时,__next__()
应该抛出一个StopIteration
异常。
任何实现了这两个方法的 Python 对象都可以被视为迭代器。列表、元组、字符串等 Python 的内置容器类型不是迭代器,但它们是可迭代的,因为它们实现了 __iter__()
方法,该方法返回一个迭代器。
## 迭代器举例
class Fibonacci:
def __init__(self, max_number):
self.max_number = max_number
self.a, self.b = 0, 1
def __iter__(self):
return self
def __next__(self):
fib = self.a
if fib > self.max_number:
raise StopIteration
self.a, self.b = self.b, self.a + self.b
return fib
# 使用迭代器
for num in Fibonacci(10):
print(num)
0
1
1
2
3
5
8
生成器(Generator):特殊的迭代器
生成器是一种特殊的迭代器。最简单的生成器是由生成器函数创建的,这是一个包含 yield
表达式的函数。当生成器函数被调用时,它不会立即执行,而是返回一个生成器对象。当你对这个对象调用 __next__()
方法(或使用 for
循环进行迭代)时,函数执行到第一个 yield
表达式并暂停,返回 yield
的值。在下次调用 __next__()
时,函数从上次暂停的地方继续执行,直到遇到下一个 yield
。
## 生成器表达式
squares = (x*x for x in range(5))
# 使用生成器
for square in squares:
print(square)
0
1
4
9
16
## 生成器函数,用 yield
def count_down(num):
while num > 0:
yield num
num -= 1
# 使用生成器
for i in count_down(5):
print(i)
5
4
3
2
1
联系和区别
联系:
- 生成器都是迭代器。生成器完全实现了迭代器接口。
- 生成器和迭代器都可以用于
for
循环和其他需要迭代对象的场景。
区别:
- 所有生成器都是迭代器,但并非所有迭代器都是生成器。迭代器是一个更广泛的概念。
- 生成器是以一种懒加载的方式产生值,即按需一次生成一个值,从而在内存使用上更高效。传统的迭代器可能需要在开始时就拥有所有的值(例如,通过在迭代器初始化时计算或加载所有值)。
- 生成器通过函数和
yield
语句来定义,使用起来通常更简洁;而传统的迭代器需要实现__iter__()
和__next__()
方法。
比较
- 简洁性:生成器函数和表达式通常更简洁,只需一个函数和
yield
。而自定义迭代器需要实现两个方法(__iter__()
和__next__()
)。 - 使用场景:生成器适合于按需生成值,尤其是值的序列很大或无限时(如斐波那契数列)。迭代器更适用于复杂的迭代逻辑,或当你需要更多控制迭代过程时。
- 状态管理:在生成器中,状态管理(如在
count_down
函数中的num
)更直观。而在迭代器中,状态需要在类的属性中显式管理(如在Fibonacci
类中的a
和b
)。
以上就是“ChatAgent: 一个基于Python的大模型智能体(Agent)框架”的全部内容,希望对你有所帮助。
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
三、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、Python练习题
检查学习结果。
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
最后祝大家天天进步!!
上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。