zoukankan      html  css  js  c++  java
  • 函数高级小结

    函数高级小结

    一、闭包函数

    def f1():
        x = 10
        def f2():
            print(x)  # 10
            
    x = 1000
    f1()  # 10
    print(x)  # 1000
    
    

    把函数和变量一起打包拿出去了,内部函数包含对外部作用于而非全局作用域的引用

    def f1(x):
        def f2():
            print(x)  # 10
        return f2
    
    f3 = f1(10)  # f2
    f3()  # f2()  # 10
    f3()  # 10
    f3()  # 10
    
    f4 = f1(5)
    f4()  # 5
    f4()  # 5
    

    二、装饰器

    • 不改变函数体代码,并且不改变函数调用方式,为函数添加功能,它本质就是一个函数
    def f1(x):
        def f2():
            print(x)  # 10
        return f2
    
    f2 = f1()
    f2()  # f2()
    
    • 完善装饰器
    def login_deco(func):
        def wrapper(*args,**kwargs):
            login_judge = login()
            if login_judge:
                res = func(*args,**kwargs)
                return res
        return wrapper
    
    @login_deco
    def shopping():
        pass
    
    # shopping = deco(shopping)
    # shopping()
    

    三、三层装饰器

    def sanceng(x,y):
        def login_deco(func):
            print(x,y)
            def wrapper(*args,**kwargs):
                login_judge = login()
                if login_judge:
                    res = func(*args,**kwargs)
                    return res
            return wrapper
       return login_deco
    
    @sanceng(10,20)
    def shopping():
        pass
    
    day20
    # shopping = login_deco(shopping)
    # shopping()
    

    四、迭代器

    1. 可迭代对象:具有__iter__方法的对象(Python中一切皆对象)
    2. 迭代器对对象:具有__iter__和__next__方法
    • 迭代器对象一定是可迭代对象,可迭代对象不一定是迭代器对象(f)

    五、三元表达式

    成立响应 if 条件 else 不成立响应
    print(True) if a >10 else print(False)
    

    六、列表推导式

    [ i for i in range(10)]
    

    七、字典生成式

    {k:v for k, v in dict.items()}
    {k:v for k, v in zip(["a", "b", "c"], [1, 2, 3])}
    

    八、生成器表达式

    (i for i in range(10))
    

    <generator object at 0x05196240>

    九、生成器

    自定义的迭代器,函数内部使用yield关键,有yield关键字的函数只要调用,这个调用后的函数就是生成器

    • yield:接收函数返回值,但是会继续执行函数体代码,n+1 next 会报错
    • return:接收函数返回值,但是会终止函数
    def f1():
        yield 1
        
    g = f1()  # 变成生成器
    
    for i in g:
        print(i)  # 1
    

    十、递归

    递归本质上就是函数调用函数本身,必须得有结束条件,并且在递归的过程中,问题的规模必须都不断缩小

    10.1 二分搜索

    def find_num(num,lis):
    
        if len(lis) == 1 and lis[0] != num:
            print('没找到')
            return
    
        mid_ind = int(len(lis) / 2)  # 中间索引
        mid_num = lis[mid_ind]  # 中间值
    
        if num < mid_num:
            lis = lis[:mid_ind]
            find_num(num,lis)
        elif num > mid_num:
            lis = lis[mid_ind + 1:]
            find_num(num, lis)
        else:
            print('find')
    
    lis = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
    find_num(20,lis)
    

    十一、匿名函数

    lamdbda 参数 : 逻辑代码
    
    • 匿名函数使用一次就失效了,一般不单独使用,与max最大值/min最小值/sorted排序/map映射/filter过滤 连用
    max(dic,key=lambda name: dic[name])
    max(dic)
    
    max(lis/se/tup)
    
    • 内置函数

    十二、面向过程编程

    类似于工厂的流水线,机械式的一步一步完成一个项目,把完成步骤具体细分,这样步骤与步骤之间互不干涉

    缺点:扩展性差,只要有一个步骤断了,项目就崩溃了
    优点:清晰优雅

    在当下的阶段,必将由程序员来主导,甚至比以往更甚。
  • 相关阅读:
    疫情环境下的网络学习笔记 python 5.8 数据库入门终章
    疫情环境下的网络学习笔记 python 5.7 navicat数据库,例题,sql注入
    疫情环境下的网络学习笔记 python 5.6 暂时看看
    疫情环境下的网络学习笔记 python 5.5 MYSql 表关系,外键
    疫情环境下的网络学习笔记 python 5.4 数据库基础
    疫情环境下的网络学习笔记 python 4.30 初识数据库
    疫情环境下的网络学习笔记 python 4.29 网络小项目
    XJOI 夏令营501-511测试11 游戏
    XJOI 夏令营501-511测试11 统计方案
    CF1197D Yet Another Subarray Problem
  • 原文地址:https://www.cnblogs.com/randysun/p/12242827.html
Copyright © 2011-2022 走看看