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

    今日内容

    1.生成器的send方法。

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

    3.匿名函数

    4.内置函数

    生成器send方法

    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.递归回溯递推的条件一定有规律

    案例:

    # 比如总共有5个人,询问第一个人的年纪,他说我比第二个人大两岁,问第二个人他说
    # 我比第三个人大两岁,依次类推。直到第五个人他说他40岁,求第一个人的年纪
    def get_age(count): # 获取人的数量,count是外界传入的信息,告诉它是几个人
    if count == 1: # 这里是出口,给出最后一个人的年纪
    return 40 # 最后一个人的年纪,来通过减法来反推
    age = get_age(count - 1)-2 # 每次进来都回把人数减1,并且岁数减2.直到count = 1 .得到最后一个人的年纪
    return age # 然后返回 计算出的第一个人的年纪
    age = get_age(10)
    print(age) # 结果为22岁


    # 求 n 的阶乘, 比如5的阶乘= 5!* 4!* 3!* 2!* 1! = 120
    # 5! = 5 * 4
    # 4! = 4 * 3
    # 3! = 3 * 2
    # 2! = 2 * 1
    # 1! = 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) # 结果为120

    匿名函数

    1.函数没有函数体,

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

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

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

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

    注意:

    1.参数的使用和有名函数一样,六种形参都支持

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

    max结合匿名工作原理

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

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

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

    常用的内置函数

    map()函数

    # res = map(lambda x:x * 2,[3,1,2])  # 将遍历结果映射为任意类型值,
    # print(list(res)) # 此处使用list接收
    # print(tuple(res)) # 也可以使用元祖接收


    #  reduce() 函数会对参数序列中元素进行累积。
    # from functools import reduce
    # res = reduce(lambda x, y: x * y, [3, 1, 2]) # 使用匿名函数,来计算列表中所有数字相乘的结果
    # print(res) # 结果为6
  • 相关阅读:
    Luogu5860 「SWTR-03」Counting Trees
    $NOIP1998$ 题解报告
    $NOIP1997$ 题解报告
    $NOIP2008$ 题解报告
    $NOIP2004$ 题解报告
    $NOIP2010$ 题解报告
    $NOIP2009$ 题解报告
    Luogu P1879 玉米田 题解报告
    CH301 任务安排2 题解报告
    $[NOIp2017]$ 逛公园 $dp$/记搜
  • 原文地址:https://www.cnblogs.com/liguodeboke/p/10797035.html
Copyright © 2011-2022 走看看