• python-study-15


    上节课复习

    上节课复习
        1、生成器
            def func():
                yield
            g=func()
            next(g)
    
            x=yield
        2、三元表达式
            res=x if 条件 else y
        3、列表推导式,字典生成式,生成器表达式
            l=[表达式 for i in 可迭代对象 if 条件]
            g=(表达式 for i in 可迭代对象 if 条件)
            d={k:v for i in 可迭代对象 if 条件}
        4、max,zip
            max(可迭代对象)
            生成器=zip(可迭代对象1,可迭代对象2)
                g=zip('hello',[1,2,3])
                # print(g)
                print(list(g))
    
    今日内容:
        1、函数递归与二分法
        2、匿名函数
        3、内置函数
        4、面向过程编程
        5、函数知识点总结
    View Code

    函数递归

    1 什么是函数递归
        函数递归调用(是一种特殊的嵌套调用):在调用一个函数的过程中,又直接或间接地调用了该函数本身
    
        递归必须要有两个明确的阶段:
            递推:一层一层递归调用下去,强调每进入下一层递归问题的规模都必须有所减少
            回溯:递归必须要有一个明确的结束条件,在满足该条件时结束递推
                开始一层一层回溯
    
        递归的精髓在于通过不断地重复逼近一个最终的结果
    
    2、为什么要用函数递归
    
    
    3、如何用
    
    import sys
    print(sys.getrecursionlimit())
    sys.setrecursionlimit(3000)
    def foo(n):
        print('from foo',n)
        foo(n+1)
    foo(0)
    
    def bar():
        print('from bar')
        foo()
    
    def foo():
        print('from foo')
        bar()
    
    foo()
    
    age(5) = age(4) + 2
    age(4) = age(3) + 2
    age(3) = age(2) + 2
    age(2) = age(1) + 2
    age(1) = 26
    
    age(n) = age(n-1) + 2 #n > 1
    age(1) = 26           #n = 1
    
    
    def age(n):
        if n == 1:
            return 26
        return age(n-1) + 2
    
    print(age(5))
    
    
    l=[1,[2,[3,[4,[5,[6,[7,[8,[9,]]]]]]]]]
    
    def tell(l):
        for item in l:
            if type(item) is list:
                #继续进入下一层递归
                tell(item)
            else:
                print(item)
    
    tell(l)
    
    有一个从小到大排列的整型数字列表
    nums=[1,3,7,11,22,34,55,78,111,115,137,149,246,371]
    10 in nums
    for item in nums:
        if item == 10:
            print('find it')
            break
    else:
        print('not exists')
        
    nums=[1,3,7,11,22,34,55,78,111,115,137,149,246,371]
    def search(search_num,nums):
        print(nums)
        if len(nums) == 0:
            print('not exists')
            return
        mid_index=len(nums) // 2
        if search_num > nums[mid_index]:
            # in the right
            nums=nums[mid_index+1:]
            search(search_num,nums)
        elif search_num < nums[mid_index]:
            # in the left
            nums=nums[:mid_index]
            search(search_num,nums)
        else:
            print('find it')
    
    search(31,nums)
    View Code


    匿名函数

    有名函数:基于函数名重复使用
    def func():
        print('from func')
    
    func()
    func()
    func()
    
    
    匿名函数:没有绑定名字的下场是用一次就回收了
    def func(x,y): #func=函数的内存地址
        return x + y
    
    res=(lambda x,y:x+y)(1,2)
    print(res)
    
    f=lambda x,y:x+y
    print(f)
    print(f(1,2))
    
    max min map filter sorted
    salaries={
        'egon':3000,
        'alex':100000000,
        'wupeiqi':10000,
        'yuanhao':2000
    }
    
    max的工作原理
    1 首先将可迭代对象变成迭代器对象
    2 res=next(可迭代器对象),将res当作参数传给key指定的函数,然后将该函数的返回值当作判断依据
    def func(k):
        return salaries[k]
    
    print(max(salaries,key=func)) #next(iter_s)
    'egon', v1=func('egon')
    'alex', v2=func('alex')
    'wupeiqi', v3=func('wupeiqi')
    'yuanhao', v4=func('yuanhao')
    
    
    salaries={
        'egon':3000,
        'alex':100000000,
        'wupeiqi':10000,
        'yuanhao':2000
    }
    print(max(salaries,key=lambda k:salaries[k])) #next(iter_s)
    print(min(salaries,key=lambda k:salaries[k])) #next(iter_s)
    
    
    l=[10,1,3,-9,22]
    l1=sorted(l,reverse=False)
    print(l1)
    
    l2=sorted(l,reverse=True)
    print(l2)
    
    salaries={
        'egon':3000,
        'alex':100000000,
        'wupeiqi':10000,
        'yuanhao':2000
    }
    
    print(sorted(salaries,key=lambda k:salaries[k],reverse=True))
    
    names=['张明言','刘华强','苍井空','alex']
    
    map的工作原理
    1 首先将可迭代对象变成迭代器对象
    2 res=next(可迭代器对象),将res当作参数传给第一个参数指定的函数,然后将该函数的返回值当作map的结果之一
    aaa=map(lambda x:x+"_SB",names)
    print(aaa)
    print(list(aaa))
    
    print([name+"_SB" for name in names])
    
    filter的工作原理
    1 首先将可迭代对象变成迭代器对象
    2 res=next(可迭代器对象),将res当作参数传给第一个参数指定的函数,然后filter会判断函数的返回值的真假,如果为真则留下res
    names=['alexSB','egon','wxxSB','OLDBOYSB']
    
    print([name for name in names if name.endswith('SB')])
    
    aaa=filter(lambda x:x.endswith('SB'),names)
    print(aaa)
    print(list(aaa))
    View Code


    内置函数

    掌握
    res='你好'.encode('utf-8')
    print(res)
    
    res=bytes('你好',encoding='utf-8')
    print(res)
    
    参考ASCII表将数字转成对应的字符
    print(chr(65))
    print(chr(90))
    参考ASCII表将字符转成对应的数字
    print(ord('A'))
    
    print(divmod(10,3))
    
    
    l=['a','b','c']
    for item in enumerate(l):
        print(item)
    
    l='[1,2,3]'
    l1=eval(l)
    print(l1,type(l1))
    print(l1[0])
    
    with open('a.txt',encoding='utf-8') as f:
        data=f.read()
        print(data,type(data))
        dic=eval(data)
        print(dic['sex'])
    
    print(pow(3,2,2)) # (3 ** 2) % 2
    
    print(round(3.3))
    
    print(sum(range(101)))
    
    module=input('请输入你要导入的模块名>>: ').strip() #module='asdfsadf'
    m=__import__(module)
    print(m.time())
    
    
    面向对象里的重点
    classmethod
    staticmethod
    property
    
    delattr
    hasattr
    getattr
    setattr
    
    isinstance
    issubclass
    
    object
    
    super
    
    
    了解
    print(abs(-13))
    print(all([1,2,3,]))
    print(all([]))
    
    print(any([0,None,'',1]))
    print(any([0,None,'',0]))
    print(any([]))
    
    print(bin(3)) #11
    print(oct(9)) #11
    print(hex(17)) #11
    
    print(callable(len))
    
    import time
    print(dir(time)) #列举出所有:time.名字
    
    
    s=frozenset({1,2,3}) # 不可变集合
    s1=set({1,2,3}) # 可变集合
    
    a=1111111111111111111111111111111111111111111111
    # print(globals())
    # print(locals())
    def func():
        x=222222222
        # print(globals())
        print(locals())
    func()
    
    hash([1,2,3])
    
    def func():
        """
        文档注释
        :return:
        """
        pass
    
    print(help(func))
    
    l=['a','b','c','d','e']
    s=slice(1,4,2)
    print(l[1:4:2])
    print(l[s])
    
    print(vars())
    View Code
  • 相关阅读:
    Day00课程前奏
    bootstrap前端框架
    html5标签
    js个人笔记
    css88
    小说拆分器
    什么是依赖注入
    与Java的约会
    Dom4J两种节点添加方法比较
    nodejs + typescript + koa + eslint + typescript eslint + prettier + webstorm
  • 原文地址:https://www.cnblogs.com/xujinjin18/p/9183402.html
Copyright © 2020-2023  润新知