zoukankan      html  css  js  c++  java
  • python 第十一章 函数名+格式化+迭代器+递归

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

    # 第一类对象 -- 特殊点
    # 没有调用得到:内存地址
    #
    # 1、可以当作值被赋值给变量
    def func():
        print(1)
    a = func
    a()
    # 输出 1
    
    # 2、当做元素存放在容器中
    def fun1():
        print("a")
    def fun2():
        print("b")
    lst = [fun1,fun2]
    for i in lst:
        i()
    # 输出
    # a
    # b
    
    
    
    # 3、函数名可以当做函数的参数
    def fun3():
        print("a")
    def fun3_1(fn):
        print("b")
        fn()
        print("c")
    fun3_1(fun3)
    # 输出
    # b
    # a
    # c
    
    
    
    # 4、函数名可以当做函数的返回值
    def fun4():
        print("a")
        def fun4_1():
            print("b")
        print("c")
        return fun4_1
    fn = fun4()
    fn()
    # 输出
    # a
    # c
    # b
    
    

    格式化

    # python3.6版本以及以上才能够使用,f和F都可以
    # f"{}" {任意数据数据}
    s =f"{1}"
    print(s)
    
    # 填充字符串
    s =f"{'您好'}"
    print(s)
    
    # 填充变量
    s1 =f"{s}python"
    print(s1)
    
    # 填充各种计算公式
    s =f"{1+2}"
    print(s)
    
    # 三元运算符
    a = 10
    b = 20
    s2 =f"{a if a>b else b}"
    print(s2)
    
    # 两个{{ }}取一个{ }
    s3 =f"{{{{hh}}}}"
    
    # %s和format和f都能格式化,一样的操作
    

    迭代器

    # 迭代  器:工具
    #
    # 可迭代对象:
    # list dict str set tuple
    # 官方声明具有__iter__()方法的就是可迭代对象
    # 查看可迭代对象
    # 1、可点出来的方法都是可迭代对象
    #.__iter__()
    list.__iter__()
    dict.__iter__()
    str.__iter__()
    set.__iter__()
    tuple.__iter__()
    
    #2、查看源码 command+鼠标移动到方式上
    
    #3、dir()
    print(dir(list))
    s1 = "alex"
    print(dir(s1))
    i = 100
    print(dir(i))
    ls = [1,2,3]
    print('_iter_' in dir(i))
    print('_iter_' in dir(ls))
    
    
    
    # 可迭代对象的优点:
    # 1、使用灵活
    # 2、直接查看值
    #
    # 可迭代对象的缺点:
    # 1、消耗内存
    # 2、不能迭代取值
    
    # 可迭代对象的取值方式
    # list,tuple,str -- 索引
    # dict -- 键
    # set -- 直接取值
    
    # 迭代器:
    # 官方声明只要具有__iter__方法__next__方法的就是迭代器
    # 迭代器:
    # 文件操作
    f = open("文件名","r")
    f.__iter__()
    f.__next__()
    
    # 将迭代对象转换成迭代器
    # 迭代对象.__iter__,重新定义变量名,变成迭代器
    # 再执行.__next__,一个一个取值
    #
    # 迭代器的优点:
    # 1、节省内存
    # 2、惰性机制
    #
    # 迭代器的缺点:
    # 1、使用不灵活
    # 2、操作比较繁琐
    # 3、不能直接查看元素
    #
    # 迭代器的特性:
    # 1、一次性的,用完销毁
    # 2、不能逆行(不能后退)
    # 3、惰性机制(节省内存)
    
    # 将可迭代对象转成迭代器
    s = () #任意可迭代对象
    new_s = s.__iter__()
    print(new_s)
    # 将迭代器的元素一一输出
    print(new_s.__next__())
    print(new_s.__next__())
    
    lst = [1,2,3,4,6]
    new_list = lst.__iter__()  # 将列表转成迭代器
    print(new_list.__next__()) # 1
    print(new_list.__next__()) # 2
    print(new_list.__next__()) # 3
    # 输出123 与print一一对应
    
    
    s = "12345"
    new_s = s.__iter__()    # 将字符串转成迭代器
    print(new_s.__next__()) # 1
    print(new_s.__next__()) # 2
    # 输出12 与print一一对应
    
    
    
    # 输出迭代器的元素的类型
    s = "123"
    new_s = s.__iter__()
    print(new_s)
    
    # for 更改版循环的本质
    # 列表型
    s = [1, 2, 3]
    count = len(s)
    new_s = s.__iter__()
    while count:
        print(new_s.__next__())
        count -= 1
    
    # 字符串型
    s1 = "alex"
    count = len(s1)
    new_s1 = s1.__iter__()
    while count:
        print(new_s1.__next__())
        count -= 1
    
    
    # for 循环的真正原理
    s2 = "alex"
    new_s2 = s2.__iter__()
    # 捕获异常
    while True:
        try: # 监听
            print(new_s2.__next__())
        except StopIteration: # 捕获
            print("取超了")
            break
        except Exception: # except 可多个  Exception 万能异常
            print("我是万能的")
            break
    
    

    递归

    # 递归
    # 1、不断调用自己本身--死递归
    # 官方声明:最大层次1000,实际测试998/997
    def func():
        print(123)
        func()
    func()
    
    # 2、有明确的终止条件
    def age(n):
        if  n == 18:
            return "对"
        else:
            return "错"
    print(age(10))
    
    # 用递归输出每个人的年龄
    # 1.宝元  18-2-2-2
    # 2.太白  18-2-2
    # 3.wusir 18-2
    # 4.alex  18
    
    def age(n):
        if n == 4:
            return 18
        else:
            return age(n+1)-2
    print(age(1))
    
    
    def age4(n):
        if n == 4:
            return 18
    def age3(n):
        if n == 4: # 问的是不是第四个了
            return 18
        else:
            return age4(n+1)-2
    def age2(n):
        if n == 4:  # 问的是不是第四个了
            return 18
        else:
            return age3(n+1)-2
    def age1(n):
        if n == 4: # 问的是不是第四个了
            return 18
        else:
            return age2(n+1)-2
    print(age1(1))
    
    

    总结

    # 语法分析
    # 执行法分析
    #
    # 陷阱,默认参数可迭代会有坑
    # 不可变的迭代对象没有坑
    #
    # 三大器:迭代器,生成器,装饰器
    
    # 1、函数名的第一类对象及使用
    # 可以作为值赋值给变量
    # 可以作为容器中的元素
    # 可以当作另一个函数的参数
    # 可以作为返回值
    #
    # 2、f格式化:f"{}{}"
    # 格式化方法:f,F,%s,format
    # 支持:表达式,函数调用,数字计算,列表取值,字典取值
    #
    # 3、迭代器
    # 可迭代对象:能够使用__iter__()方法
    # 迭代器:能够使用__iter__()和__next__()方法
    #
    # 可迭代对象的特性:
    # 优点:使用灵活,可直接查看值,每个可迭代对象都有私有的方法
    # 缺点:占内存,不能迭代取值
    #
    # 迭代器:
    # 优点:省空间,惰性机制
    # 缺点:使用不灵活,不能直接查看值,不能直接查看元素,不能逆行
    #
    # 迭代器的使用:
    # 当容器中数据量较多的时候使用
    #
    # 4、递归
    # 不断调用自己本身
    # 有明确的结束条件
    # 拆开理解
    # 一递一归
    
    
    
  • 相关阅读:
    1082 射击比赛 (20 分)
    1091 N-自守数 (15 分)
    1064 朋友数 (20 分)
    1031 查验身份证 (15 分)
    1028 人口普查 (20 分)
    1059 C语言竞赛 (20 分)
    1083 是否存在相等的差 (20 分)
    1077 互评成绩计算 (20 分)
    792. 高精度减法
    791. 高精度加法
  • 原文地址:https://www.cnblogs.com/zhangshan33/p/11211545.html
Copyright © 2011-2022 走看看