zoukankan      html  css  js  c++  java
  • f-strings格式化、迭代器、生成器

    1、建议小写f:

    name = "宝元"
    age = 18
    sex = "男"
    msg = F"姓名:{name},性别:{age},年龄:{sex}"
    msg1 = f"姓名:{name},性别:{age},年龄:{sex}"
    print(msg)
    print(msg1)
    结果:  姓名:宝元,性别:18,年龄:男

         姓名:宝元,性别:18,年龄:男

    2、表达式:字典取值、列表取值、函数表达式
    函数计算:
    def func(a,b):
    return a + b
    msg = f"运行结果{func(1,2)}"
    print(msg)
    结果:运行结果3
    列表切片:
    lst = [1,2,32,34,45,5]
    msg = f"运行结果:{lst[0:3]}"
    print(msg)
    结果:运行结果:[1, 2, 32]
    字典取值:
    dic = {"key":1,"key1":22}
    msg = f"运行结果:{dic['key1']}"
    print(msg)
    结果:运行结果:22
    三元表达式:
    a = 10
    b = 20
    msg = f"{a if a > b else b}"
    print(msg)
    结果:20
    3、迭代器:  具有__iter__()和__next__()方法就是一个迭代器
    优点:     节省内存
            文件句柄就是迭代器
            迭代器:一个一个取值
            for循环就是一个迭代器
            迭代器也是一个可迭代对象
    缺点:     只能一个方向直行
            一次性的
            不能灵活操作、不能直接查看元素个数
    应用:     内存小、数据量巨大时、建议使用迭代器
    4、可迭代对象:  str、list、tuple。。。
    优点:     
    python中规定、只要具有__iter__()方法就是可迭代对象

            可迭代对象能重复取值
            使用灵活(每个可迭代对象都有自己的方法)
            能够直接查看元素的个数
    缺点:     占内存
    应用:     内存空间大、当数据量比较少、建议使用可迭代对象。
    str.__iter__()
    list.__iter__()
    dict.__iter__()
    set.__iter__()
    tuple.__iter__()
    lst = [1,2,3,4,5]
    5、转换:     将可迭代对象转换成迭代器
    l = lst.__iter__()
    print(l)
    结果:<list_iterator object at 0x00000000027187F0>
    有多少个元素就只能next多少次
    取值:
    print(l.__next__())
    6、注意点:
    lst = [1,2,3,4,5]
    print(lst.__iter().__next__())  #lst.__iter__()是一个迭代器1
    print(lst.__iter().__next__())  #lst.__iter__()是一个迭代器2
    7、for循环本质:
    s = "alex"
    s1 = s.__iter__()
    while True:
      try:  #尝试着运行一下缩进体中的代码
        print(s1.__next__())
      except StopIteration:
        break
    8、两种方法:
    方法一:
    lst = [1,2,3,54]
    l = lst.__iter__()
    print(l.__next__())
    方法二:
    lst = [1,2,3,54]
    l = iter(lst)
    print(next(l))
    9、时间换空间:用大量的时间换取一些空间变小--只能一点点的next、例如迭代器、生成器
    空间换时间:使用大量的空间来节省时间、例如列表、可迭代对象、
    10、生成器的本质就是一个迭代器
    11、生成器和迭代器的区别?
                  迭代器:文件句柄、通过数据转换python自带提供
                  生成器:程序员自己实现
    12、生成器的目的:不在通过数据转换实现、而是通过代码编写实现。
      生成器的定义:基于函数实现的生成器
            表达式实现生成器
    13、函数体中存在yield就是定义一个生成器
    def func():
    print(1)
    yield 5
    print(func())  #创建一个生成器对象的内存地址
    print时打印的是一个生成器对象的内存地址
    14、语法分析
      词法分析
    15、生成器怎么用?
    特点:惰性机制
    def func():
    yield 1  #记录执行位置的
    yield 2
    yield 3
    a = func() #获取的是生成器的内存地址
    print(next(a)) #取值
    print(next(a)) #取值
    print(next(a)) #取值
    结果:1
       2
       3
    16、区分迭代器和生成器?
                查看是否可用send方法
                看内存地址(主推荐的)
    17、生成器一定是一个迭代器、但是迭代器不一定是一个生成器
    18、迭代器和生成器的优点:
                节省空间
      迭代器和生成器的缺点:
                不能直接使用元素
                不能直观查看元素的个数
                使用不灵活
                稍微消耗时间
                一次性的、不能逆行
    19、yield from--将列表整体返回
    def func():
    yield from [1,2,23,54,5]
    g = func()
    for i in g:
    print(i)
    结果: 1
        2
        23
        54
        5
    20、yield from--将列表逐个返回
    def func():
    yield from [1,2,23,54,5]
    g = func()
    print(next(g))
    21、yield from小坑
    def func():
    lst1 = ["卫龙","老冰棍","北冰洋","牛羊配"]
    lst2 = ["馒头","花卷","豆包","大饼"]
    yield from lst1
    yield from lst2
    g = func()
    for i in g:
    print(i)
    结果: 卫龙
        老冰棍
        北冰洋
        牛羊配
        馒头
        花卷
        豆包
        大饼
    22、yield 能返回多个、以元组的形式存储
      yield 能返回各种数据类型(python的对象)
      yield 能够写多个并且都执行
      yield 能够记录执行位置
      yield 后边不写内容、默认返回None
      yield 都是将数据一次性返回
    23、作业题:
    # 1.请写出下列代码的执行结果
    def func1():
    print('in func1')
    def func2():
    print('in func2')
    ret = func1
    ret() #in func1
    ret1 = func2
    ret1() #func2
    ret2 = ret
    ret3 = ret2
    ret2() #in func1
    ret3() #in func1
    # 2、
    def func1():
    print ( 'in func1' )
    def func2():
    print ( 'in func2' )
    def func3(x, y): #x = func2,y = func1
    x () #func2()
    print ( 'in func3' )
    y () #func1()
    print ( 111 ) #111
    func3 ( func2, func1 ) #in func2
    #in func3
    #in func1
    print ( 222 ) #222
    # 3、选做题
    def func1():
    print('in func1')
    def func2(x): #x == func1
    print('in func2')
    return x #return下func1就是把func1返回
    def func3(y): #y == func2
    print('in func3')
    return y
    ret = func2(func1) #ret == func1
    ret() #func1()
    ret2 = func3(func2) #ret == func2
    ret3 = ret2(func1) #func2(func1) #ret3 == func1
    ret3() #func1()
    # 结果:in func2
    # in func1
    # in func3
    # in func2
    # in func1
    # 4、
    def func(arg):
    return arg.replace('alex', '****')
    def run():
    msg = "Alex和大家都是好朋友"
    result = func(msg)
    print(result)
    run()
    data = run()
    print(data)
    # 结果:Alex和大家都是好朋友
    # Alex和大家都是好朋友
    # None
    # 5、
    data_list = []
    def func(arg):
    return data_list.insert(0, arg)
    data = func('绕不死你')
    print(data) #None
    print(data_list) #data_list = ['绕不死你']
    # 6、
    def func():
    print('你好呀')
    return '好你妹呀'
    func_list = [func, func, func]
    for item in func_list:
    val = item()
    print(val)
    #你好呀
    # 好你妹呀
    # 你好呀
    # 好你妹呀
    # 你好呀
    # 好你妹呀
    # 7、
    def func():
    print('你好呀')
    return '好你妹呀'
    func_list = [func, func, func]
    for i in range(len(func_list)):
    val = func_list[i]()
    print(val)
    # 你好呀
    # 好你妹呀
    # 你好呀
    # 好你妹呀
    # 你好呀
    # 好你妹呀
    # 8、
    def func():
    return '大烧饼'
    def bar():
    return '吃煎饼'
    def base(a1, a2):
    return a1() + a2()
    result = base(func, bar)
    print(result) #大烧饼吃煎饼
    # 9、
    def func():
    for item in range(10):
    pass
    return item
    func()
    # 结果:空
    # 10、
    def func():
    for item in range(10):
    pass
    yield item
    func()
    # 结果:空
    # 11、
    item = '老男孩'
    def func():
    item = 'alex'
    def inner():
    print(item)
    for inner in range(10):
    pass
    inner()
    func() #类型错误、int对象不可调用
    # 12、
    l1 = []
    def func(args):
    l1.append(args)
    return l1
    print(func(1)) #[1]
    print(func(2)) #[1,2]
    print(func(3)) #[1,2,3]
    # 13、
    name = '宝元'
    def func():
    global name
    name = '男神'
    print(name) #宝元
    func()
    print(name) #男神
    # 14、
    name = '宝元'
    def func():
    print(name)
    func() #宝元
    # 15、
    name = '宝元'
    def func():
    print(name)
    name = 'alex'
    func() #报错赋值前引用的局部变量
    # 16、
    def func():
    count = 1
    def inner():
    nonlocal count
    count += 1
    print(count)
    print(count)
    inner()
    print(count)
    func()
    #结果: 1
    # 2
    # 2
    # 17、
    def extendList(val,list=[]):
    list.append(val)
    return list
    list1 = extendList(10)
    list2 = extendList(123,[])
    list3 = extendList('a')
    print('list1=%s'%list1) #list1 = [10,'a']
    print('list2=%s'%list2) #list2 = [123]
    print('list3=%s'%list3) #list3 = [10,'a']
    # 18、
    def extendList(val,list=[]):
    list.append(val)
    return list
    print('list1=%s'% extendList(10)) #list1=[10]
    print('list2=%s'% extendList(123,[])) #list2=[123]
    print('list3=%s'% extendList('a')) #list3=[10, 'a']
    #18、用你的理解解释一下什么是可迭代对象,什么是迭代器。
    # python中规定、只要具有__iter__()方法就是可迭代对象、例如:str字符串、list列表、tuple元组
    #具有__iter__()和__next__()方法就是一个迭代器、例如:文件句柄就是迭代器
    #19、使用while循环实现for循环的本质(面试题)
    s = "alex"
    s1 = s.__iter__()
    while True:
    try:
    print(s1.__next__())
    except StopIteration:
    break
  • 相关阅读:
    Python记录_day21 模块
    python记录day_20 多继承
    python记录_day019 类的约束 异常处理 日志
    python记录_day018 md5加密
    python记录_day18 反射 判断函数与方法
    python记录_day17 类与类之间的关系
    python记录_day16 类的成员
    实验0 了解和熟悉操作系统
    IT就业·软件工程之我见
    递归下降分析程序
  • 原文地址:https://www.cnblogs.com/zhang-da/p/11631112.html
Copyright © 2011-2022 走看看