zoukankan      html  css  js  c++  java
  • 函数名的第一类对象及使用 f格式化 迭代器 递归

    1.函数名的第一类对象及使用

    函数名可以当做值被赋值

    def func():
        print(1)
    print(func)
    a = func
    a()                   # <function func at 0x000001A24F8E9B70>     1
    

    函数名可以当做元素存放在容器中

    def func():
        print(1)
    lst = [func,func,func]
    for i in lst:
        i()                 # 1 1 1
    

    函数名可以当做另一个函数的参数

    def func(f):
        f()
    def foo():
        print(123)
    func(foo)                         # 123
    

    函数名可以当做返回值

    def func():
        def foo():
            print(123)
        return foo
    a = func()
    a()                                # 123
    

    2.f格式化

    f格式化的作用

    填充字符串

    s = f"你好{'常鑫'}"
    s1 = F"{你好'常鑫'}"
    

    填充变量

    s = "常鑫"
    S1 = f"你还是挺好的{s}"
    print(s1)
    

    填充计算公式

    s1 = "{35+15}"
    print(s1)
    

    填充表达式

    a = 10
    b = 20
    s1 = f"{a if a>b else b}"
    print(s1)
    

    填充大括号

    s1 = f"{{{{{{'常鑫'}}}}}}"
    print(s1)            # {{{'常鑫'}}}
    

    3.迭代器

    迭代器,一种工具

    可迭代对象:

    list,dict,str,set,tuple -- 可迭代对象 使用灵活
    

    查看是否可迭代

    方式一:

    list.__iter__()
    

    方式二:

    查看源码

    方式三:

    print(dir(list))
    

    官方声明只要具有__iter__()方法的就是可迭代对象

    优缺点

    1.优点

    ​ 1.1 使用灵活

    ​ 1.2 直接查看值

    2.缺点

    ​ 2.1 消耗内存

    迭代器

    官方声明只要具有__iter__()方法 __next__()方法就是迭代器

    句柄"f"是个迭代器
    f = open("xxxx","w")
    f.__iter__()
    f.__next__()
    
    lst = [1,2,3,4,6]
    new_list = lst.__iter__()  #将可迭代对象转换成迭代器
    new_list.__iter__()
    new_list.__next__()
    
    s = "123434"
    new_s = s.__iter__()       #将可迭代对象转换成迭代器
    print(new_s)
    new_s.__iter__()
    new_s.__next__()
    
    new_s = s.__iter__()       #将可迭代对象转换成迭代器
    print(new_s)
    new_s.__iter__()
    print(new_s.__next__())
    print(new_s.__next__())
    print(new_s.__next__())
    
    s = "12343"               # 更改版for的本质
    s = [1,2,3,4,5,7]
    count = len(s)
    new_s = s.__iter__()
    while count:
        print(new_s.__next__())
        count -= 1
    
    s = "12345"
    new_s = s.__iter__()
    while True:
        try:
            print(new_s.__next__())   # for真实本质
        except StopIteration:
            break
            
    # except Exception:
    #     print("我是万能的!")
    #     break
    

    4.递归

    定义

    1.自己调用自己 (不断调用自己本身) -- 死递归

    2.有明确的终止条件

    满足以上两个才是有效递归

    递:一直执行直到碰到结束条件

    归:从结束条件开始往回退

    官方声明: 最大层次1000,实际测试 998/997

    示例:      猜3
    def age(n): # 1,2,3
        if n == 3:
            return "猜对了"
        else:
            return age(n+1)
    print(age(1))
    

    分解

    def age2(n):
        if n == 3:
            return "猜对了"
    
    def age1(n):
        if n == 3:
            return "猜对了"
        else:
            age2(n+1)
    
    def age(n):
        if n == 3:
            return "猜对了"
        else:
            age1(n+1)
    age(1)
    

    总结

    可迭代对象:
    优点:使用灵活,可以直接查看值
    缺点:占内存,不能迭代取值

    迭代器:
    优点:节省内存,惰性机制
    缺点:使用不灵活,操作比较繁琐,不能直接查看元素

    迭代器的特性:
    1.一次性的(用完就没有了)
    2.不能逆行(不能后退)
    3.惰性机制(节省内存)

    什么是可迭代对象:
    具有很多私有方法,具有__iter__()方法的就是一个可迭代对象

    什么是迭代器:
    具有__iter__()和__next__()方法的就是迭代器

    迭代器什么时候使用:当容器中数据量较多的时候使用迭代器

  • 相关阅读:
    对象形式传递
    解决DLNA方案的技术框架
    关于DLNA
    MAC配置Xcode的Cocos2d-x环境
    什么叫做双缓冲?
    Window7 Cocos2d-x配置开发环境
    Windows 8.1 Update 2更新了什么?
    微软发布Windows Phone 8.1 Update 和中文版Cortana“小娜”
    大开眼界 游览Facebook香港办公室
    小米的“假照片”危机
  • 原文地址:https://www.cnblogs.com/beichen123/p/11240848.html
Copyright © 2011-2022 走看看