zoukankan      html  css  js  c++  java
  • 迭代器 递归

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

    第一类对象-特殊点

    1.可以当作值被赋值给变量

    2.当作元素存放在容器中

    3.函数名可以当作函数的参数

    4.函数名可以当作函数的返回值

    def func():
        print(1)
    a = func
    print(a)
    print(func)
    结果:
    
    
    def func():
        print(1)
    lst = [func,func,func]
    print(lst)
    for i in lst:
        i()
    结果:
    [<function func at 0x000002954B78CB70>, <function func at 0x000002954B78CB70>, <function func at 0x000002954B78CB70>]
    1
    1
    1    
    
    def func(f):
        print(f)
    def foo():
        print(233)
    func(foo)
    结果:
        
    
    def func():
        def foo():
            print(233)
        return foo
    print(func())
    结果:
        
    
    
    def f1():
        def f2():
            print(1)
            def f3():
                print(123)
            return f2
        ret = f2()
        return ret
    print(f1())
    结果:
    1
    <function f1.<locals>.f2 at 0x0000018B0361CBF8>
        
    

    f格式化--python3.6以上版本才可使用

    %s 和format都可以 f

    s = f"你好{'常鑫'}"#填充字符串
    s1 = F"你好{'常鑫'}"
    print(s,s1)
    
    s = f"你好{s}"#填充变量
    print(s)
    
    s1 = f"{35+12}"#填充计算公式
    print(s1)
    
    a = 10
    b = 20
    s1 = f"{a if a>b else b}"#填充三元运算符
    print(s1)
    
    s1 = f"{{{{{'常鑫djb'}}}}}"#两个括号合一个
    print(s1)
    
    s1 = f"{print(123)}"#填充函数
    print(s1)
    
    def foo():
        def func():
            a = 1
            return a
        return func()
    s1 = f"{foo()}"
    print(s1)
    
    lst = [1,2,3,4,5,6]
    s1 = f"{lst[:5]}"
    print(s1)
    
    dic = {"key":123,"key2":345}
    s1 = f"{dic['key']}"
    print(s1)
    

    迭代器

    当容器中数据量较大的时候使用迭代器,如文件句柄

    迭代器优点:节省内存,惰性机制

    迭代器缺点:使用不灵活,操作繁琐,不能直接(查看元素)查看所有的值

    迭代器的特性:

    • 一次性的
    • 不能逆行(不能后退)
    • 惰性机制(要一个给一个,不要就不给)----节省内存

    器:工具

    **可迭代对象---------list, dict, str, set ,tuple **--具有很多私有方法,具有__iter-_()方法就是一个可迭代对象,使用灵活

    可迭代对象不一定是迭代器,但是迭代器一定是可迭代对象.

    查看 是否是可迭代对象的方法

    # list.__iter__()
    # dict.__iter__()
    # str.__iter__()
    # set.__iter__()
    # tuple.__iter__()
    

    方法二

    看源码

    方法三 :dir

    print(dir(list))

    方法四

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

    可迭代对象的优点:

    1.使用灵活

    2.直接查看值

    可迭代对象的缺点:

    消耗内存

    取值方式:

    list ,tuple,str --索引

    dict--键

    set--直接取值

    for

    迭代器: __iter__()将可迭代对象转化乘迭代器

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

    基于上一个停留的位置进行取值

    s = "152132"
    new_s = s.__iter__()#将可迭代对象转化乘迭代器
    print(new_s)
    print(new_s.__next__())
    print(new_s.__next__())
    print(new_s.__next__())
    print(new_s.__next__())
    结果
    1
    5
    2
    1
    

    for 循环原理

    s = "12332"
    new_s = s.__iter__()
    while True:
        try:
            print(new_s.__next__())
        except StopIteration:  #捕获错误
            break
            
    s = "12332"
    new_s = s.__iter__()
    while True:
        try:
            print(new_s.__next__())
        except Exception:  #万能异常捕获
            break
    

    递归:

    自己学习---学会百度

    递归条件:1.自己调用自己(官方话,不断调用自己本身)

    ​ 2.要有明确的终止条件

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

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

    归:从结束条件往回退

    官方声明最大层次1000,实际测试998/997 可以修改

    def age(n):
        if n == 4:
            return 18
        else :
            return age(n+1)-2
    print(age(1))
    
  • 相关阅读:
    VMware Workstations Pro15.1.0并解锁Unlock3.0.2 安装黑苹果
    正则表达式对字符串匹配
    Linq操作
    C#模糊查询绑定datagridview
    wpf的datepicker处理
    动态调用webservice,不需要添加Web References
    C#调用sap接口及返回数据到sap
    C#中文件管理的运用(Twelfth Day)
    C#中继承,集合(Eleventh day)
    C#中字符串的处理,对象的引用及继承(Tenth day)
  • 原文地址:https://www.cnblogs.com/ciquankun/p/11206796.html
Copyright © 2011-2022 走看看