zoukankan      html  css  js  c++  java
  • 复习整理2

    filter 接收函数,作为筛选条件,返回True,false

    # # filter(function(筛选),iterable)
    # def func(x):
    #     return x % 2 == 1
    # lst = [1, 2,3,4,5,6,7,8,9]
    # lt = filter(func,lst)  #接收函数,作为筛选条件
    # print(list(lt))
    
    filter()

    map函数,对每一个元素进行映射,分别执行func

    # # map 映射函数,  语法 map(func,iterable) 可以对可迭代对象中的每一个元素进行映射,分别执行func
    #
    # # 计算每一个元素的平方
    #
    # # def func(x):
    # #     return x ** 2
    # #
    # # lst = [1,3,5,7,9]   # 接收到的是一个迭代器
    # # lt = map(func,lst)
    # # print(lt)
    # # print(list(lt))
    #
    # lst1 = [1,3,5,7,9]
    # lst2 = [2,4,6,8,10]
    #
    # print(list(map(lambda x,y: x+y, lst2,lst1)))  # 如果后面有多个列表,需要一一对应

    递归,函数自身条用自身,只关注起始条件和结束条件不关注中间过程。递归时注意最大递归深度,即结束条件写好

    # 在函数中自己调用自己就是递归
    
    # def func(a,b,n):
    #     print(a)
    #     while n < 5:
    #         a,b = b,a+b
    #         print(b)
    #         n += 1
    #
    # func(0,1,0)
    
    # n = 993
    # def func():
    #     global n    # 不要在局部作用域里面尝试改变全局变量
    #     while n > 0:
    #         print("ly")
    #         n -= 1
    #         func()
    #
    # func()
    
    # def func():
    #     print("ly")
    #     func()
    #
    # func()  # 超过最大递归深度会报错
    
    
    # 文件夹结构就是树形结构
    # 遍历树形结构
    import os
    filepath = "F:\python\12_27"
    
    def read(filepath,n):
        lt = os.listdir(filepath)
        for e in lt:
            if os.path.isdir(os.path.join(filepath,e)):
                print("	"*n,e)
                read(os.path.join(filepath,e),n+1)
            else:
                print("	"*n,e)
    
    read(filepath,0)

    二分查找,两种递归写法,一种普通写法

    # 二分查找
    # lst = [11,22,33,44,55,66,77,88,99]
    # left = 0
    # right = len(lst) - 1
    # n = 66
    # while left <= right:
    #     middle = (left + right) // 2
    #     if n > lst[middle]:
    #         left = middle + 1
    #     elif n < lst[middle]:
    #         right = middle - 1
    #     else:
    #         print(middle)
    #         break
    # else:
    #     print("没到到")
    
    # lst = [11,22,33,44,55,66,77,88,99]
    # def func(left,right,n):
    #     middle = (left + right) // 2
    #     if left > right:
    #         return -1
    #     if lst[middle] < n:
    #         left = middle + 1
    #     elif lst[middle] > n:
    #         right = middle - 1
    #     else:
    #         return middle
    #     return func(left,right,n)
    #
    # print(func(0,len(lst),78))
    
    
    # lst = [11,22,33,44,55,66,77,88,99]
    # def func(lst,n):
    #     middle = (0 + len(lst)) // 2
    #     if len(lst) <= 0:
    #         return -1
    #     if n > lst[middle]:
    #         lst = lst[middle:]
    #     elif n < lst[middle]:
    #         lst = lst[:middle]
    #     else:
    #         return lst[middle],"Yes"
    #     return func(lst,n)
    #
    # print(func(lst,88))

    快捷键: ctrl b 查看源码

                  ctrl alt l 按照pep8 规范代码。自己编辑时注意,不要太依赖

    # # # def func(a, b, c):
    # # #     print(a, b, c)
    # # #
    # # #
    # # # func(1, 2, 1)
    # #
    # # def func(*args,**kwargs):  # 动态参数。针对的是传参不确定的情况,*args 接收全部位置参数, **kwargs 接收全部为位置参数
    # #     print(args)
    # #     print(kwargs)
    # #     print(*args)
    # #     # print(**kwargs)
    # #
    # # func(1, 2, 3, name = "Ly", age=100)
    # # # (1, 2, 3)
    # # # {'name': 'Ly', 'age': 100}
    # # # 1 2
    # #
    # # # 当定义一个函数的时候* 代表的是聚合,当执行一个函数的时候*代表的打散
    # #
    #
    #
    # def func(*args,**kwargs):
    #     print(args)
    #     print(*args)
    #
    # l1 = [1, 2, 3]
    # l2 = [4, 5, 6]
    # func(*l1,*l2)
    
    def func():
        a = 1
        b = 2
        print(a)
        def func2():
            b = 3
            print(a,b)
        print(666)
        func2()
        print(111)
    
    func()  # 1 666 1 3  111
    回顾
    生成器
    生成器的本质就是迭代器
    创建的方式
    生成器函数
    在函数中包含了yield,可以分段执行函数
    def func():
    pass
    yield 1
    yield 2
    func() 创建一个生成器
    __next__() 可以触发一次生成器执行,执行到下一个yield。最后一个yield之后在执行__next__()会报错。StopIteration

    生成器表达式
    列表表达式:[结果 for 变量 in 可迭代对象 if 条件筛选]
    生成器表达式:(结果 for 变量 in 可迭代对象 if 条件筛选),没有元组推导式
    字典表达式:(结果(k:v) for 变量 in 可迭代对象 if 条件筛选)
    集合表达式:(结果k,v) for 变量 in 可迭代对象 if 条件筛选)

    特点:
    节省内存
    惰性机制
    只能向前


    函数的定义:以功能为导向
    函数的返回值 :结束函数
    不写return 或者return 后面不写时默认都是None。多个返回值时都作为元组返回

    函数的传参:(实参)1.位置参数
    2.关键字参数
    3.混合参数 位置参数在关键在参数的前面
    (形参)1.位置参数
    2.默认参数
    3.动态参数 位置参数在默认参数的前面 *args,**kwargs

    名称空间:当程序执行时,将变量与值的对应关系存放在一个空间中,临时名称空间:这个空间会随着函数执行结束而消失。
    内置名称空间:python自带的内置函数

    全局作用域:内置名称空间,全局名称空间。 局部作用域 临时名称空间

    global:在函数中声明一个全局变量
    在函数中修改一个全局变量


    nonlocal 对父级或者更高级变量进行修改但是不能修改全局变量

    闭包:内存函数对外存函数的引用,在函数执行结束后,变量不会马上消失,可以节省时间

    迭代器:内部含有__iter__和__next__方法的
    好处:节省内存
    惰性机制
    一直向前
    生成器:
    自己用python代码写的迭代器
    生成器表达式:循环模式[i for i in range(20)]
    筛选模式[i for i in range(20) if i > 5]


  • 相关阅读:
    数据结构-堆(优先队列)习题
    数据结构-二叉搜索树习题
    数据结构-树习题
    数据结构-队列习题
    数据结构-堆栈习题
    数据结构-链表习题
    数据结构-顺序表习题
    数据结构-概论习题
    C语言中的stdin,stdout,stderr[转]
    SQL Server 查询数据库表结构
  • 原文地址:https://www.cnblogs.com/yfjly/p/10575735.html
Copyright © 2011-2022 走看看