格式化输出
-
优点:
- 结构清晰
- 可以结合表达式和函数使用
- 效率提升了
-
入门demo
# 格式化输出
name = 'lld'
age = 18
# 格式化输出:方式1
msg1 = '我的名字是:%s 我的年龄是:%s' % (name, age) # 使用不是很方便
# 格式化输出:方式2
msg2 = '我的名字是:{} 我的年龄是:{}'.format(name, age) # 使用不是很方便
# 格式化输出:方式3
msg3 = f'我的名字是:{name} 我的年龄是:{age}' # 使用方便
print(msg1)
print(msg2)
print(msg3)
- 语法规范
F(f)+ str的形式,在字符串中想替换的位置用{}展位,与format类似,但是用在字符串后面写入替换的内容,而他可以直接识别。
- 任意表达式
# 任意表达式
name = 'lld'
age = 18
msg = f'我的名字是:{name.upper()} 我的年龄是:{age}'
print(msg) # 我的名字是:LLD 我的年龄是:18
# 字典
student = {'name': 'lld', 'age': '22'}
msg = f'我的名字是:{student["name"].upper()} 我的年龄是:{student["age"]}'
print(msg)
# 列表
l1 = ['lld', 18]
msg = f'我的名字是:{l1[0]} 我的年龄是:{l1[1]}'
print(msg)
- 函数
# 函数
def func(a, b):
return a + b
print(f'11+12的结果是:{func(11, 12)}'), # 11+12的结果是:23
- 多行f
# 多行f
name = 'barry'
age = 18
ajd = 'handsome'
# Hi barry.You are 18 years old.You are a handsome guy!
speaker = f'Hi {name}.' \
f'You are {age} years old.'\
f'You are a {ajd} guy!'
print(speaker)
- 注意事项
print(f"{{73}}") # {73}
print(f"{{{73}}}") # {73}
print(f"{{{{73}}}}") # {{73}}
m = 21
# ! , : { } ;这些标点不能出现在{} 这里面。
# print(f'{;12}') # 报错
# 所以使用lambda 表达式会出现一些问题。
# 解决方式:可将lambda嵌套在圆括号里面解决此问题。
x = 5
print(f'{(lambda x: x*2) (x)}') # 10
迭代器
- 可迭代对象
- 解释:内部含有’_iter_'方法的对象
- 目前学过的可迭代对象:str dict set list tuple 文件句柄 range
- 优点:
- 存储的数据能够显示,比较直观
- 拥有的方法比较多
- 缺点
- 占内存
- 获取一个对象的所有方法,并且以字符串的方式返回
# 查看一个对象的所有方法
print(dir(str))
# 判断对象中是否包含__iter__方法
print('__iter__' in dir(str)) # True
-
迭代器
-
定义
- 字面意思:更新迭代,器:工具:可更新迭代的工具
- 专业角度:内部含有’__iter__‘和’_next_'方法的对象就是迭代器
- 可以判断是否是迭代器
f = open('c:\测试01.txt') print('__iter__' in dir(f) and '__next__' in dir(f)) # True
-
-
迭代对象转换为迭代器
# 创建一个迭代对象
s1 = 'asdf'
# 将迭代对象转换为迭代器
obj = iter(s1) # obj = s1.__iter__()
# 将其输出
print(next(obj)) # obj.__next__()
print(next(obj))
print(next(obj))
print(next(obj))
-
迭代器的优点
- 节省内存
- 惰性机制(一次取一个值)
-
迭代器缺点
- 速度慢
- 不走回头路
-
可迭代对象与迭代器对比
- 可迭代对象操作方法比较多,比较直观,存储数据相对较少的数据集
- 当你侧重于灵活处理,并且内存空间足够多,将数据集设置为可迭代对象是一个明确的选择
- 迭代器是一个非常节省内存,可以记录取值位置,可以通过循环加next()方法取值,但是不直观,操作数据的方法比较单一
- 当你的数据量过大,大到足以撑爆你的内存或者你以节省内存为首选因素时,将数据集设置为一个迭代器是一个不错的选择
文件句柄就是一个迭代器
-
利用while循环模拟for循环可迭代对象进行取值的机制
# 利用while循环模拟for循环可迭代对象进行取值的机制
# 创建可以可迭代对象
l1 = [11, 22, 33, 44, 55, 66]
# 将可迭代对象转换成为迭代器
obj = l1.__iter__()
# 使用while循环进行取值
while 1:
try:
print(obj.__next__())
# 当出现stopIteration时跳出循环
except StopIteration:
break