08.格式化输出,迭代器

格式化输出

  • 优点:

    • 结构清晰
    • 可以结合表达式和函数使用
    • 效率提升了
  • 入门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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值