• 函数(方法)


    函数的定义和调用

    申请内存,存函数体代码
    将内存地址绑定给函数名
    定义函数,不会执行函数体代码,但是会检测语法

    def func():
        函数体
    

    调用函数
    func()

    有参函数,无参函数,空函数

    语句形式,表达式形式,函数调用可以当参数

    结束函数的调用:return

    return 返回值,没有值或者return就是None
    return x,y,[1,] 值组成元组,返回元组

    实参与形参

    位置参数

    位置形参:
    def func(x,y):
    print(x,y)
    参数必须传相应数量

    位置实参:
    参数必须一一对应传入,按形式参数名字赋值也可

    关键字参数
    具体到传给哪个形参,可以打乱传参顺序

    混合使用:
    先位置,后关键
    不能为同一个形参重复传值

    默认形参:
    def func(x,y = 1):
    print(x,y)
    定义阶段赋值形参,为默认值
    默认值一般不是可变类型,l = None
    注意:有默认值的参数在后面

    可变长度的参数
    def func(x,y,z,*args,**kwargs):

    用来接收溢出的位置实参:*args
    用来接收溢出的关键字实参:**kwargs
    args是溢出的值,args = (),保存成元组
    **kwargs是字典
    func(
    [1,2,3])
    将列表解压成三个位置参数
    *实际参数 相当于遍历对象,取每一个值为位置参数
    **实际参数 相当于遍历对象(字典,字典的key,必须和形参一一对应),取每一个值为关键字参数
    *args 在 **kwargs 之前

    def index(x,y,z):
        print('index=>>> ',x,y,z)
    
    def wrapper(*args,**kwargs): #args=(1,) kwargs={'z':3,'y':2}
        index(*args,**kwargs)
        # index(*(1,),**{'z':3,'y':2})
        # index(1,z=3,y=2)
    
    wrapper(1,z=3,y=2) # 为wrapper传递的参数是给index用的
    原格式---》汇总-----》打回原形
    

    命名关键字参数:定义函数时,*后定义的参数,

    def func(a,s,*,t,n):
    t,n为命名关键字参数
    func(1,2,111,222)
    t,n 只能传关键字参数
    
    def func(x,a = 111,*args,命名关键字参数,**kwargs):
    
    func(2,*,y=1,**)
    
    名称空间:内置名称空间,全局名称空间,局部名称空间
    

    内置:
    Python解释器内置的名字
    解释器的启动和关闭
    全局:
    除了内置,和函数内定义的名称,顶级代码的名称
    python文件执行,开始与结束
    局部:
    函数体内,定义的名称
    执行函数,开始与结束

    加载:内置>全局>局部
    销毁:局部>全局>内置

    空间不是真正的东西,真正的是栈区

    名称查找优先级:
    先找当前,找不到,然后再往上找:局部 > 全局 > 内置

    名称空间的嵌套关系,以定义阶段为准了了了!!!

    注意:运行顺序

    局部空间的自由变量,检测语法的时候,就已经将变量名字放进名称空间,标记为什

    么区域的变量,执行语法的时候,才绑定值

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

    global : 把变量变为全局变量
    nonlocal: 用于把变量变为非local,非全局的变量

    一:大前提:
    闭包函数=名称空间与作用域+函数嵌套+函数对象
    核心点:名字的查找关系是以函数定义阶段为准

    二:什么是闭包函数
    "闭"函数指的该函数是内嵌函数
    "包"函数指的该函数包含对外层函数作用域名字的引用(不是对全局作用域)

    闭包函数:名称空间与作用域的应用+函数嵌套

    def f1():
        x = 33333333333333333333
        def f2():
            print(x)
        f2()
    
    
    x=11111
    def bar():
        x=444444
        f1()
    
    def foo():
        x=2222
        bar()
    
    foo()
    

    闭包函数:函数对象

    def f1():
        x = 33333333333333333333
        def f2():
            print('函数f2:',x)
        return f2
    
    f=f1()
    print(f)
    
    x=4444
    f()
    def foo():
        x=5555
        f()
    
    foo()
    

    三:为何要有闭包函数=》闭包函数的应用
    两种为函数体传参的方式
    方式一:直接把函数体需要的参数定义成形参

    def f2(x):
        print(x)
    
    f2(1)
    f2(2)
    f2(3)
    
    方式二:
    def f1(x): # x=3
        x=3
        def f2():
            print(x)
        return f2
    
    x=f1(3)
    print(x)
    
    x()
    
    import requests
    
    传参的方案一:
    def get(url):
        response=requests.get(url)
        print(len(response.text))
    
    get('https://www.baidu.com')
    get('https://www.cnblogs.com/linhaifeng')
    get('https://zhuanlan.zhihu.com/p/109056932')
    
    
    传参的方案二:
    def outter(url):
        # url='https://www.baidu.com'
        def get():
            response=requests.get(url)
            print(len(response.text))
        return get
    
    baidu=outter('https://www.baidu.com')
    baidu()
    
    cnblogs=outter('https://www.cnblogs.com/linhaifeng')
    cnblogs()
    
    zhihu=outter('https://zhuanlan.zhihu.com/p/109056932')
    zhihu()
    
  • 相关阅读:
    VIM配置
    guanyuzhuguosha
    会议室同步时钟布置
    npm ERR! missing script: dev npm ERR! A complete log of this run can be found in: npm ERR!
    Xmind2021安装激活破解
    SpringCloudAlibaba 中文文档
    flex布局 滚动条失效
    Luogu P3397 地毯
    Luogu P4343 自动刷题机
    Luogu P1902 刺杀大使
  • 原文地址:https://www.cnblogs.com/pythonwl/p/12513240.html
Copyright © 2020-2023  润新知