• Day 11 函数名的第一类对象及使用,f格式化,迭代器,递归


    第一类对象 -- 特殊点

    1.函数可作为值可以赋值给变量
    def func():
    print(1)
    print(func)
    a = func
    a()

    2.当做元素存放在容器中
    def fun():
    print(1)
    lst = [func,func,func]
    for i in lst:
    i()

    3.函数名可以当做函数的参数
    def func(f):
    f()
    def foo():
    print(123)
    func(foo)

    4.函数名可以当做函数的返回值
    def func():
    def foo():
    print(123)
    return foo
    a = func()
    a()

    f格式化 python3.6以上才能用

    s = f"你好{'长信'}" 推荐小写
    s1 = F"你好{'长信'}"
    print(s)
    print(s1)

    s = f"你好{'长信'}" #填充字符串
    s1 = F"你好{'长信'}"
    s1 = f"你还是挺好的{s}" #填充变量
    s1 = f"{35+15}" #填充计算公式

    a = 10
    b = 20
    s1 = f"{a if a > b else b}" #填充表达式

    s1 = f"{{{{'长信水电费'}}}}" #填充大括号

    s1 = f"{{}{}{}{}{}}" #填充大括号
    print(s)
    print(s1)

    s1 = f"{print(123)}"
    print(s1)

    迭代器:工具
    可迭代对象
    lst,dic,str,set,tuple--可迭代对象。使用灵活

    查看是不是可迭代对象
    方法一
    list.iter()
    dict.iter()
    set.iter()
    str.iter()
    tuple.iter()

    方法二
    查看源码

    方法三
    print(dir(list))

    官方说明
    只要有__iter__方法就是可迭代对象

    可迭代对象的优点:
    1.使用灵活
    2.直接查看

    可迭代对象的缺点:
    1.消耗内存

    list.tuple.str-索引
    dict--键
    set--直接取值
    int,bool--没有方法,不是可迭代对象

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

    lst = [1,2,3,4]
    new_list = lst.iter() #将迭代对象转换成迭代器
    print(new_list)
    print(new_list.iter())
    print(new_list.next())

    for 的本质

    s = '12345' #更改版for的本质
    s = [1,2,3,4,5,6]
    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:
    print('取超了')
    break
    except Exception: #面试不写这个,写for真实本质
    print('我是万能的')
    break

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

    迭代器:
        优点:节省内存,惰性机制
        缺点:使用不灵活,操作繁琐,不能直接查看值
    迭代器的特性:
        1.一次性的
        2.不能逆行(不能后退)
        3.惰性机制(节省内存)
    什么是可迭代对象:
        1.具有很多私有方法,具有__iter__()方法,就是可迭代对象。
    什么是迭代器:
        具有__iter__()和 __next__()方法就是迭代器
    迭代器什么时候使用:
        当容器中数据量较多的时候使用迭代器
    

    递归函数
    1.自己调用自己(不断调用自己本身)--死递归
    2.有明确的终止条件
    满足以上两个才算递归

    递:一直执行知道碰到条件成立结束
    归:

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

    死递归
    def func():
    print(123)
    func()
    func()

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

    def age(n):
    if n == 4:
    return 18
    else:
    return age(n+1)-2#age(age2(age3(age(4))-2)-2)-2
    print(age(1))

    今日内容总结
    1.函数名的第一类对象及使用
    1.1函数名可以当做值被赋值
    1.2函数名可以当做元素存放在容器中
    1.3函数名可以当做另一个函数的参数
    1.4函数名可以当做返回值

    2.f格式化
    支持:F,表达式,函数调用,数字计算,列表取值,字典取值

    3.迭代器
    1.可迭代对象:具有__iter__()方法就是可迭代对象
    2.迭代器:具有__iter__(),具有__next__()方法就是迭代器

    4.递归
    1.自己调用自己
    2.有明确的结束条件
    满足两个才是递归
    一递 一归

  • 相关阅读:
    pku 2446 Chessboard
    POJ 2724 Purifying Machine
    14 Flash内存控制器(FMC)
    10 PWM发生器和捕捉定时器
    15 I2C总线控制器
    18 RTX Kernel实时系统
    17模拟数字转换
    19.1 详解startup_M051.s
    16串行外围设备接口(SPI)控制器
    13看门狗
  • 原文地址:https://www.cnblogs.com/zhuzhizheng/p/11232560.html
Copyright © 2020-2023  润新知