zoukankan      html  css  js  c++  java
  • 6.2、嵌套函数,作用域,偏函数


    内嵌函数(嵌套函数): 

    • 意思:在函数里面再定义一个新的函数
    • 如果在函数体内不调用内嵌的函数,那么无法在外部调用
    def my_pr1():
        print("第一层打印")
        def my_pr2():
            print("第二层打印")
        my_pr2()#如果在函数体内不调用内嵌的函数,那么无法在外部调用
    
    my_pr1()

    作用域: 

    local(局部作用域)  -->enclosing(函数范围作用域)-->global(全局作用域)--->build-in(内建对象作用域)

    代码块级别的作用域: Python没有划分代码块作用域

    • 代码块里的变量,外部可以调用
    if 1>0:
        name="automan"
    
    print(name)

    上述代码运行结果:

    automan

    函数基本的作用域: 

    局部作用域: 

    • 函数内部定义的变量是局部变量,外部无法访问
    a=50
    def change(x):
        x=6
    
    change(a)
    print("after change:",a)

    上述代码运行结果:

    after change: 50
    def func3():
        superman="automan"
    print(superman)
    --------------------------------------
    运行结果:
    NameError: name 'superman' is not defined

    内嵌关系的函数的作用域: 

    • 对于内嵌关系的函数的作用域依然遵循local(局部作用域)  -->enclosing(函数范围作用域)-->global(全局作用域)--->build-in(内建对象作用域)
    1. 如果自身函数有目标变量,则使用自身函数内的变量的值;
    2. 如果没有,会向上找父函数中是否存在目标变量,如果有,则使用父函数中的该变量的值;【如果父函数还有父函数,也会一直向上查找】
    3. 直到离开最外层的函数体,那么会在全局范围内找该变量
    4. 如果再没有,会到内建对象作用域找
    5. 都没有就报错,抛出异常
    def func4():
        superman="automan"
        def haha():
            print(superman)
        haha()
    
    func4()
    
    -------------------
    运行结果:
    automan

    非内嵌关系的函数的作用域:

    •  非内嵌关系的函数作用域依然遵循local(局部作用域)  -->enclosing(函数范围作用域)-->global(全局作用域)--->build-in(内建对象作用域)
    • 但由于不是父子关系的嵌套函数,当自身函数范围区域内找不到时,会直接到全局作用域找
    aotuman='金甲战士'
    def f5():
        print(aotuman)
    
    def f4():
        aotuman='max'
        f5()
    
    f4()
    ---------------------
    运行结果:
    金甲战士

    偏函数:

    •  默认填写某个函数的某些参数,返回一个新的函数
    • 避免了参数的重复输入
    import functools
    
    print_t=functools.partial(print,end='	')
    
    print_t(1)
    print_t(1)
    print_t(1)

    上述代码结果:

    1    1    1    
  • 相关阅读:
    iOS 表单 application/x-www-form-urlencoded
    iOS WebRTC
    静态库文件
    .crash 文件解析
    UIWebView转WKWebView,与前端交互的问题
    App Technical Support
    关于URL转义问题
    关于iOS架构相关的博客
    Mac Jenkins
    零碎知识点
  • 原文地址:https://www.cnblogs.com/progor/p/8409782.html
Copyright © 2011-2022 走看看