
【Python】(八)列表生成式、迭代器、生成器、装饰器
发布日期:2021-05-08 01:12:19
浏览次数:18
分类:精选文章
本文共 1666 字,大约阅读时间需要 5 分钟。
列表生成式与迭代器
列表生成式
列表生成式(List Comprehensions)是Python编程中一个强大的工具,可以用来简洁地创建列表。它通过在一个列表推导式中将表达式和迭代语句结合在一起,从而避免了传统的循环结构。
例子
要生成一个简单的列表,可以使用以下代码:
list(range(1, 11))
这将返回 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
。
如果想要生成一个平方数的列表,可以使用列表生成式:
[x * x for x in range(1, 11)]
这会生成 [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
。
列表生成式可以嵌入多个条件判断。例如,筛选出偶数的平方:
[x * x for x in range(1, 11) if x % 2 == 0]
这将返回 [4, 16, 36, 64, 100]
。
迭代器
在Python中,能够作用于for
循环的对象称为可迭代对象(Iterable)。常见的可迭代对象包括列表、元组、集合、字典、字符串以及生成器等。
判断可迭代对象
可以通过isinstance()
方法判断一个对象是否是可迭代对象:
from collections import Iterableisinstance([], Iterable) # Trueisinstance({'key': 'value'}, Iterable) # Trueisinstance('abc', Iterable) # Trueisinstance((x for x in range(10)), Iterable) # Trueisinstance(100, Iterable) # False
生成器
生成器(Generator)是一种特殊的可迭代对象,它可以在循环时惰性计算每个元素。生成器可以通过函数返回一个生成器对象,或者通过列表推导式将[]
改为()
来创建。
示例
g = (x * x for x in range(10))
这个生成器可以通过for
循环遍历:
for n in g: print(n)
生成器的优势在于它不会占用内存,适合处理大量数据或无限数据。
装饰器
装饰器(Decorator)是一种通过动态地扩展函数功能的机制。它通过将一个函数包装在一个新的函数中,增添额外的功能。
简单装饰器
def log(func): def wrapper(*args, **kw): print('call %s():' % func.__name__) return func(*args, **kw) return wrapper
使用示例:
@logdef now(): print('2015-3-25')
调用时:
now()
输出:
call now():2015-3-25
带参数的装饰器
def log(text): def decorator(func): @functools.wraps(func) def wrapper(*args, **kw): print('%s %s():' % (text, func.__name__)) return func(*args, **kw) return wrapper return decorator
使用示例:
@log('execute')def now(): print('2015-3-25')
调用时:
now()
输出:
execute now():2015-3-25
总结
列表生成式是一种简洁高效的列表创建工具,生成器能够在循环时惰性计算,节省内存。装饰器是一种动态扩展函数功能的强大工具,可以在不修改函数定义的情况下为函数添加功能。
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月04日 11时32分51秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Hibernate入门(四)---------一级缓存
2019-03-06
MySQL事务(学习笔记)
2019-03-06
一个web前端开发者的日常唠叨
2019-03-06
内存分配-slab分配器
2019-03-06
技术写作技巧分享:我是如何从写作小白成长为多平台优秀作者的?
2019-03-06
Jupyter Notebook 暗色自定义主题
2019-03-06
[Python学习笔记]组织文件
2019-03-06
基于Redo Log和Undo Log的MySQL崩溃恢复流程
2019-03-06
从RocketMQ的Broker源码层面验证一下这两个点
2019-03-06
如何正确的在项目中接入微信JS-SDK
2019-03-06
纵览全局的框框——智慧搜索
2019-03-06
快服务流量之争:如何在快服务中占领一席之地
2019-03-06
【活动】直播揭秘<如何从0开发HarmonyOS硬件>
2019-03-06
Unity平台 | 快速集成华为性能管理服务
2019-03-06
对模拟器虚假设备识别能力提升15%!每日清理大师App集成系统完整性检测
2019-03-06
使用Power BI构建数据仓库与BI方案
2019-03-06
Django认证系统并不鸡肋反而很重要
2019-03-06
tep用户手册帮你从unittest过渡到pytest
2019-03-06
12张图打开JMeter体系结构全局视角
2019-03-06
Spring Boot 2.x基础教程:构建RESTful API与单元测试
2019-03-06