zoukankan      html  css  js  c++  java
  • 递归,匿名函数,内置函数

    带参装饰器 Send 原理

     

    send原理
    1.send发生信息给当前停止的yield
    2.再去调用__next__()方法,生成器接着往下指向,返回下一个yield值并停止

    '''
    1.繁琐版
    variety=['黄连','茯苓','半夏','杜若','连翘','苏叶']
    def namer(variety):
        print('%s满眼都是六便士'%variety[0])
        print('%s却抬头看见了月亮'%variety[0])
        name=yield variety[0]

        print('%s听闻%s满眼都是六便士'%(name,variety[1]))
        print('%s抬头看见了月亮' % variety[1])
        name = yield variety[1]

        print('%s听闻%s满眼都是六便士' % (name, variety[2]))
        print('%s抬头看见了月亮' % variety[2])
        name = yield variety[2]

    obj = namer(variety)
    # obj为刚开始的药品
    q=obj.__next__()
    # 黄连
    print('------------------------')
    q=obj.send(q)
    print('------------------------')
    q=obj.send(q)
    '''
    '''
    简化版
    variety=['黄连','茯苓','半夏','杜若','连翘','苏叶']

    def namer(variety):
        for i in range(len(variety)):
            if i == 0:
                print('%s满眼都是六便士'%variety[0])
            else:
                print('%s听闻%s满眼都是六便士'% (name,(variety[i])) )
            print('%s抬头看见了月亮'%variety[i])
            name=yield variety[i]
    obj=namer(variety)
    for i in range(len(variety)):
         if i == 0:
             q=obj.__next__()
         else:
             q=obj.send(q)
         print('-------------')
    '''

     递归:

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

     回溯:找寻答案的过程

     递推:推出结果的过程

     

     前提条件:

     1.递归必须有出口

     2.递归回溯递推的条件一定有规律

    import sys
    print(sys.getrecursionlimit())
    # 获取最大递归层数
    sys.setrecursionlimit(100)
    # 设置最大递归层数
    print(sys.getrecursionlimit())
    '''
    '''
    递归
    count=0
    def f():
        global count
        count +=1
        print(count)
        f()

    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
        j = n*jiecheng(n-1)
        return j
    res=jiecheng(100)
    print(res)

    f()

     

    ef fn(*args, **kwargs):

         函数体

        return '返回值'

     

     匿名函数:

    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工作原理一样,得到的是最小值

    map 映射

    dic={
        'qwe':8,
        'asd':4
    }
    res=map(lambda k: (k,dic[k]*2),dic)
    print(list(res))

    map(lambda x: x * 2, [3, 1, 2]) # 将遍历结果映射为任意类型值 [6, 2, 4]

    reduce合并

    from functools import reduce
    res=reduce(lambda x , y: x+y, [5,92,54,1,3,])
    print(res)
    res=reduce(lambda x , y: x*y, [5,92,54,1,3,])
    print(res)
    print(sum([2,6,9,5,8,6,]) )

    常用的内置函数

     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

    from functools import reduce

     

     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

     

    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']

     

     

     6.获取帮助

     help(dict)

     

     7.执行字符串: eval() exec()

     

     8.反射:getattr() setattr() delattr() hasattr()

     

     9.面向对象的装饰器:classmethod() staticmethod()

     

     10.面向对象的其他:super() globals() locals()

    print(globals())

     

    def fn():

        a = 10

        b = 20

        def inner(): pass

    print(globals())    以字典类型返回当前位置的全部全局变量

        print(locals())     以字典类型返回当前位置的全部局部变量

    fn()

  • 相关阅读:
    "Key Violation" with ClientDataSet
    c# 的关键字 params,out,ref
    eval && JSON.parse
    json2.js
    C#中的索引器
    call , apply , caller , callee
    iphone&ipad图标去除高亮的光圈效果
    调用系统路线导航
    调科大讯飞出现的问题
    得到汉字首字母在表中的顺序位置
  • 原文地址:https://www.cnblogs.com/komorebi/p/10798254.html
Copyright © 2011-2022 走看看