Python迭代器与格式化

本文介绍了Python中的三元运算、正则表达式、迭代器及格式化输出等实用技巧。通过实例展示了如何利用这些特性简化代码,提高编程效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python迭代器与格式化

三元运算

对if…else判断的简写

>>> age = 18
>>> res = "You are so young!" if age < 18 else "You are so eld!"
### 如果满足条件就返回前面的内容,不满足就返回后面的内容
>>> print(res)
You are so eld!
正则表达式
>>> test_list = [1,2,3,4,5]
>>> result_list = [i*i for i in test_list] 
>>> print(result_list)
[1, 4, 9, 16, 25]

>>> result_list = [i**i for i in test_list if i < 3]  ##还可以为正则表达式添加一个判断条件
>>> print(result_list)
[1, 4]
迭代器和可迭代对象

迭代器对象要求支持迭代器协议的对象,在Python中,支持迭代器协议就是实现对象的__iter__()和next()方法。其中__iter__()方法返回迭代器对象本身;next()方法返回容器的下一个元素,在结尾时引发StopIteration异常

#############for循环的本质#############
>>> test_list = [1,2,3,4]
>>> iter_list = test_list.__iter__()   ##通过这种方法把iter_list变为迭代器
>>> print(type(iter_list))
<class 'list_iterator'>        
>>> print(iter_list.__next__())     ##用__next__()方法实现
1
>>> next(iter_list)           ##用next()方法实现
2
>>> next(iter_list)
3
>>> next(iter_list)
4
>>> next(iter_list)
Traceback (most recent call last):
  File "<pyshell#21>", line 1, in <module>   
    next(iter_list)
StopIteration   ##当遍历完之后就会报错

可迭代对象可以分为,

第一类是集合数据类型

第二类是generator,包括生成器和带yield的函数

生成器

在 Python 中,使用了 yield 的函数被称为生成器(generator)

>>> people = ("People_%s" %i for i in range(10))  ##写在()里的就叫做正则表达式
>>> next(people)
'People_0'
>>> next(people)
'People_1'
>>> next(people)
'People_2'
>>> next(people)
'People_3'
>>> next(people)
'People_4'
>>> next(people)
'People_5'
>>> next(people)
'People_6'
>>> next(people)
'People_7'
>>> next(people)
'People_8'
>>> next(people)
'People_9'
>>> next(people)
Traceback (most recent call last):
  File "<pyshell#48>", line 1, in <module>
    next(people)
StopIteration
格式化
%[(name)][flags][width].[precision]typecode方式
  • (name) 为命名
  • flags 可以有 +,-,’ ‘或 0.+ 表示右对齐.- 表示左对齐。’ ’ 为一个空格,表示在正数的左侧填充一个空格,从而与负数对齐。0 表示使用 0 填充
  • width 表示显示宽度
  • precision 表示小数点后精度
常用类型码作用
%s字符串 (采用str()的显示)
%d十进制整数
%i十进制整数
%f浮点数
%%字符“%”
>>> print("%.2f" %2.13414)
2.13
>>> print("I like to %s" %"read")
I like to read
format(self, *args, **kwargs)
数字格式输出描述
3.1415926{:.2f}3.14保留小数点后两位
3.1415926{:+.2f}+3.14带符号保留小数点后两位
-1{:+.2f}-1.00带符号保留小数点后两位
2.71828{:.0f}3不带小数
5{:0>2d}05数字补零 (填充左边, 宽度为2)
5{:x<4d}5xxx数字补x (填充右边, 宽度为4)
10{:x<4d}10xx数字补x (填充右边, 宽度为4)
1000000{:,}1,000,000以逗号分隔的数字格式
0.25{:.2%}25.00%百分比格式
1000000000{:.2e}1.00e+09指数记法
13{:10d}13右对齐 (默认, 宽度为10)
13{:<10d}13左对齐 (宽度为10)
13{:^10d}13中间对齐 (宽度为10)
>>> print("I am {name} and {age} years old, from {hometown}".format(name = "Hermaeus", age = 19, hometown = "meishan"))
I am Hermaeus and 19 years old, from meishan

>>> print("I an {0} and {1} years old, from {2}".format( "Hermaeus",19, "meishan"))	  
I an Hermaeus and 19 years old, from meishan

>>> print("I am {name}, {age} years old!".format(**{"name":"Hermaeus","age":19}))	  
I am Hermaeus, 19 years old!
<think>好的,我现在需要帮助用户了解Python迭代器的功能和用途。根据用户的问题,我需要结合提供的引用资料来组织回答,确保符合系统级指令的要求。 首先,用户明确要求介绍Python迭代器的使用场景和功能。我需要先回顾引用中的相关信息,尤其是引用[1]、[3]、[4]中提到的内容。引用[4]详细说明了迭代器的定义和内部机制,比如__next__和__iter__方法,这些是迭代器的核心功能。引用[1]和[3]则提到了迭代器在实际中的应用,比如处理大数据集和使用map()函数返回迭代器。 接下来,我需要按照用户的要求,将回答结构化,分点说明功能和用途。功能部分应该包括惰性计算、内存高效、统一接口和链式处理,这些在引用中有对应的内容。使用场景方面,大数据处理、流式数据、延迟计算和函数式编程都是需要涵盖的点,引用中的例子如逐行读取文件、生成器表达式和map函数可以作为例子。 同时,要注意系统级指令中的格式要求,行内数学表达式用$...$,但这里可能用不上。代码块需要用正确的语法,比如Python代码用反引号包裹,并标明语言。引用标识需要自然添加在相关段落末尾,例如在提到惰性计算时引用[4],处理大数据集时引用[1]。 另外,用户要求生成相关问题,我需要根据内容提出三个相关问题,比如如何自定义迭代器生成器的区别,以及惰性求值的优缺点。这些问题应该回答内容紧密相关,帮助用户进一步学习。 最后,检查回答是否符合所有要求:结构清晰、引用正确、格式无误。确保没有使用任何Markdown,中文回答,并且每个引用标识对应正确的内容来源。这样用户就能全面理解迭代器的功能和用途,同时获得进一步探索的方向。</think>### Python迭代器功能使用场景解析 #### 一、核心功能 1. **惰性计算(Lazy Evaluation)** 迭代器仅在需要时生成数据,不会一次性加载所有数据到内存。例如使用`next()`函数时才会计算下一个值,这种特性在处理大规模数据时尤为重要[^4]。 2. **内存高效** 通过逐项访问数据,避免一次性存储完整数据集。例如`map()`函数返回迭代器时,不会生成完整列表,而是按需计算[^3]。 3. **统一访问接口** 所有迭代器都遵循`__iter__()`和`__next__()`方法,使得不同数据结构(列表、字典、文件流)的遍历方式统一[^4]。 4. **链式处理能力** 可结合`filter()`、`map()`等函数实现数据管道。例如: ```python result = map(lambda x: x*2, filter(lambda x: x>0, data)) ``` #### 二、典型使用场景 1. **大数据集处理** 当处理GB级文件时,可用迭代器逐行读取: ```python with open('large_file.txt') as f: for line in f: # 文件对象本身就是迭代器 process(line) ``` 此方法仅保持单行数据在内存中[^1]。 2. **流式数据源** 适合网络请求、传感器数据等实时流,如异步迭代器处理HTTP长连接: ```python async for data in websocket_stream: # 异步迭代器示例 handle(data) ``` 这种场景常见于实时数据处理系统[^2]。 3. **延迟计算场景** 使用生成器表达式生成无限序列: ```python squares = (x**2 for x in itertools.count(1)) print(next(squares)) # 1 print(next(squares)) # 4 ``` 4. **函数式编程** `itertools`模块结合实现复杂操作: ```python from itertools import islice first_10 = islice(iterable, 10) # 获取前10项无需加载完整数据 ``` #### 三、技术实现要点 - 自定义迭代器需实现`__iter__()`(返回自身)和`__next__()`方法 - 迭代器耗尽后再次调用`next()`会触发`StopIteration` - 可通过`iter()`函数显式获取对象的迭代器版本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值