zoukankan      html  css  js  c++  java
  • 生成器的send方法, 递归, 匿名函数,内置函数

    今日内容

    1.生成器的send方法 了了解

    2.递归:函数自己调自己

    3.匿名函数

    4.内置函数

    生成器的send方法

    工作原理:1)send发生信息给当前停止的yield

         2)在调用——next——()方法,生成器接着往下指向,返回下一个yield值并停止

    # 案例:
    persons = ['张三', '李四', '王五', '赵六', '钱七']
    
    def order(persons):
        for i in range(len(persons)):
            if i == 0:
                print('%s在面试' % persons[0])
            else:
                print('%s叫%s在面试' % (name, persons[i]))
            print('%s面试完毕' % persons[i])
            name = yield persons[i]
    
    obj = order(persons)
    for i in range(len(persons)):
        if i == 0:
            p = obj.__next__()
        else:
            p = obj.send(p)
        print('=============================')

    递归

    函数直接或间接调用本身,都称之为递归

      回溯:找答案的过程

      递推:推出结果的过程

    前提条件1)递归必须有出口; 2)递归回溯递推的条件一定有规律

    # 案例一:获得第 count 个人的年纪
    def get_age(count):
        if count == 1:
            return 58
        # 第 九...一 个人 - 2
        age = get_age(count - 1) - 2
        return age
    
    age = get_age(3)
    print(age)
    
    
    # 案例二:求n的阶乘  5! = 5 * 4 * 3 * 2 * 1 = 120
    # 5! = 5 * 4!
    # 4! = 4 * 3!
    # 3! = 3 * 2!
    # 2! = 2 * 1!
    # 1! = 1
    def jiecheng(n):
        if n == 1 or n == 0:
            return 1
        ji = n * jiecheng(n - 1)
        return ji
    res = jiecheng(5)
    print(res)

    匿名函数

    1.匿名函数没有函数名

    2.匿名函数的关键字采用lambda

    3.关键字 lambda  与标识函数功能提体:之间一定是参数,所以省略()

    4.匿名函数没有函数体,只有返回值,所以函数体和返回值的return 关键字都省略了

       lambda  *args, **kwargs: '返回'

    注意:1)参数的使用和有名函数一样,六种形参都支持

       2)返回值必须明确成一个值,可以为单个值对象,也可以为一个容器对象

    a = lambda *args, **kwargs: '返回值1', '返回值2'
    print(a)  # (<function <lambda> at 0x0000022D0B7E88C8>, '返回值2')
    # 返回值1
    print(a[0]())
    
    
    # 正确返回两个值: 主动构成成容器类型
    lambda *args, **kwargs: ('返回值1', '返回值2')

    max结合匿名工作原理

      1)max内部会遍历iter,将遍历结果一一传给 lambda的参数x

      2)依据lambda的返回值作为比较条件,得到最大条件下的那个遍历值

      3)对外返回最大的遍历值

    max(iter, lambda x: x)

    min工作原理与max上一样,只是得到的是最小值

    常用的内置函数

    map(lambda x: x * 2, [3, 1, 2]) # 将遍历结果映射为任意类型值 [6, 2, 4]
    
    from functools import reduce
    reduce(lambda x, y: x * y, [3, 1, 2])  # 6
    
    sorted(iter, fn, reverse)
    dic = {
        'owen': (1, 88888),
        'zero': (2, 66666),
        'tom': (3, 77777),
    }
    res = sorted(dic, key=lambda k: dic[k][1])
    print(res)  # ['zero', 'tom', 'owen']
    
    res = sorted(dic, key=lambda k: dic[k][1], reverse=True)
    print(res)  # ['owen', 'tom', 'zero']
    # 1.与类型相关的
    # list() str() ord() chr() bool() int() ...
    
    print(ord('A'))
    print(chr(97))
    
    # 2.进制转化
    print(bin(10))  # 1010
    print(oct(10))  # 12
    print(hex(10))  # a
    
    print(0b1111)  # 15
    print(0o10)  # 8
    print(0x11)  # 17
    
    
    # 3.常用操作类的
    # range() len() iter() next() enumerate() id() type() print() input() open()
    
    # 4.原义字符串
    print(r'a
    b')
    print(ascii('a
    b'))
    print(repr('a
    b'))
    
    
    # 5.数学相关运算
    # abs() sum() max() min() pow() sorted()
    print(abs(-1))
    print(pow(2, 3))  # 2**3
    print(pow(2, 3, 3))  # 2**3%3
  • 相关阅读:
    IO学习BufferedWriter 规格严格
    Finalization 规格严格
    linux下查看主板内存槽与内存信息 规格严格
    调试JavaScript/VB Script脚本程序(Wscript篇) 规格严格
    ORA01688:unable to extend table name。name partition NAME by NUM in tablespace NAME 规格严格
    Hidden Java 7 Features – SecondaryLoop 规格严格
    Web应用服务器监控 规格严格
    NetBeans 时事通讯(刊号 # 12 Jun 16, 2008)
    NetBeans 时事通讯(刊号 # 12 Jun 16, 2008)
    Win32 DLL的一个调试心得
  • 原文地址:https://www.cnblogs.com/wyf20190411-/p/10796196.html
Copyright © 2011-2022 走看看