zoukankan      html  css  js  c++  java
  • 生成器的send方法、递推函数、匿名函数及常用内置函数

    生成器的send方法

    在使用yield方法创建生成器时,不仅可以使用next方法进行取值,还可以通过send方法向生成器的内部传值

    什么是send方法?

     send方法相当于高级的next方法,send方法不仅可以通过yield方法取出生成器中的值,还可以向生成器中传值

     send方法的工作步骤

    由于生成器在执行过程中,不会直接执行,当使用next方法进行取值时才会执行,当遇到yield关键字时停止,并把yield中的值传递出来
    首先,send方法会将外界的值传递进生成器内部,在由生成器中相应的变量进行接收
    然后,生成器会向下执行,直到遇到下一个yield停止,并将yield后面的值返回出来 --> 相当于next方法
    需要注意的是,由于生成器不会自动运行,只有在遇到next时才会向下执行,所以在遇到第一个yield之前不能使用send向生成器中传递值,或者只能传递None

    案例:

    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('=============================')
    

      

    递归函数

    什么是递归函数?


    -- 函数直接或者间接调用自身都叫递归函数
    -- 回溯:通过条件找寻答案的过程
    -- 递推:通过答案进行回推的过程

    递归函数的特点:

    -- 递归函数必须有出口
    -- 递归函数进行回溯及递推时必须有规律

    案例

    # 获得第 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)
    

     

    匿名函数

    什么是匿名函数?

    -- 匿名函数就是不需要函数名的函数,该函数使用一次就会被回收。

    匿名函数:

    -- 匿名函数没有函数名
    -- 匿名函数的关键字采用lambda
    -- 关键字 lambda 与标识函数功能体 : 之间一定是参数,所以省略()
    -- 匿名还是没有函数体,只有返回值,所以函数体和返回值的return关键字都省略了

    匿名函数的形式:

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

    -- 注意:
    -- 参数的使用和有名函数一样,六种形参都支持
    -- 返回值必须明确成一个值,可以为单个值对象,也可以为一个容器对象

     实例

    a = lambda *args, **kwargs: '返回值1', '返回值2'
    print(a) # (<function <lambda> at 0x0000022D0B7E88C8>, '返回值2')

    匿名函数的应用

    -- 匿名的函数经常会配合内置函数进行使用
    -- 实例:

    -- max、min、sorted函数
    max(iter, lambda x: x)
    min(iter, lambda x: x)
    sorted(iter, fn, reverse)
    -- map、reduce函数
    map(lambda x: x * 2, [3, 1, 2])
    reduce(lambda x, y: x * y, [3, 1, 2])

    常用的内置函数

    常用的内置函数及内置的的类等放在源码的buildin文件中,可以通过一个内置函数进入这个文件

    与类型相关的

    list() str() ord() chr() bool() int() ...
    
    print(ord('A'))
    print(chr(97))

    进制转化

    print(bin(10)) # 1010
    print(oct(10)) # 12
    print(hex(10)) # a
    
    print(0b1111) # 15
    print(0o10) # 8
    print(0x11) # 17

    常用操作类的

    range() len() iter() next() enumerate() id() type() print() input() open()  

    原义字符串

    print(r'a
    b')
    print(ascii('a
    b'))
    print(repr('a
    b'))

    数学相关运算

    abs() sum() max() min() pow() sorted()
    print(abs(-1))
    print(pow(2, 3)) # 2**3
    print(pow(2, 3, 3)) # 2**3%3
    

      

  • 相关阅读:
    java基础5 (一维)数组和二维数组
    Java 内部类
    Java 抽象类和接口
    Java 多态
    Java 继承
    Java 包(package)
    Java String类和StringBuffer类
    Java 数组
    Java 封装与类
    Java 概述和编程基础
  • 原文地址:https://www.cnblogs.com/lice-blog/p/10815740.html
Copyright © 2011-2022 走看看