zoukankan      html  css  js  c++  java
  • python-day12--函数进阶

    1.命名空间:

    分三种:全局命名空间,局部命名空间,内置命名空间。

    加载顺序:内置命名空间→全局命名空间→局部命名空间

    取值顺序:局部命名空间→全局命名空间→内置命名空间

    2.作用域:

    作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域。

    全局作用域:包含 内置名称空间、全局名称空间,在整个文件的任意位置都能被引用、全局有效

    局部作用域:局部名称空间,只能在局部范围内生效

    小范围可以用大范围,大范围不能用小范围

    在小范围内,如果要用一个变量,是当前这个小范围有的,就用自己的
    如果在小范围内没有,就用上一级的,上一级没有就用上上一级的,以此类推。如果都没有,报错

    3.globals方法  (全局改变)

    a = 10
    def func():
        global a
        a = 20

    print(a)
    func()
    print(a)

    4.locals方法   

    def func():
        a = 12
        b = 20
        print(locals())
        print(globals())

    func()

    在局部调用globals和locals

    5.函数的嵌套和作用域链

    嵌套定义:定义在内部的函数无法直接在全局被调用

    def f1():

        def f2():

            def f3():

                print("in f3")

            print("in f2")

            f3()

        print("in f1")

        f2()

    f1()

    作用域链:在小范围内,如果要用一个变量,是当前这个小范围有的,就用自己的
    如果在小范围内没有,就用上一级的,上一级没有就用上上一级的,以此类推。如果都没有,报错

    6.nonlocal关键字

    # 1.外部必须有这个变量

    # 2.在内部函数声明nonlocal变量之前不能再出现同名变量
    # 3.内部修改这个变量如果想在外部有这个变量的第一层函数中生效

    def f1():
        a = 1
        def f2():
            nonlocal a
            a = 2
        f2()
        print('a in f1 : ',a)

    f1()

    7.函数的本质:

    ①简单的说就是一个变量,保存了函数所在的内存地址

    ②具体来说:1.可以当变量被引用;2.可以被当作容器类型的元素;3.可当作函数的参数和返回值

    8.闭包函数:

    定义:  1.闭:内部的函数;2.包:包含外部函数的变量(就是用到外部函数的变量)

    固定格式:

    def func():
        name = 'eva'
        def inner():
            print(name)
        return inner

    f = func()
    f()

    9.判断闭包函数的方法:   __closure__

    #输出的__closure__有cell元素 :是闭包函数
    def func():
        name = 'eva'
        def inner():
            print(name)
        print(inner.__closure__)
        return inner

    f = func()
    f()

    #输出的__closure__为None :不是闭包函数
    name = 'egon'
    def func2():
        def inner():
            print(name)
        print(inner.__closure__)
        return inner

    f2 = func2()
    f2()

    10.闭包嵌套:

    def wrapper():
        money = 1000
        def func():
            name = 'eva'
            def inner():
                print(name,money)
            return inner
        return func

    f = wrapper()
    i = f()
    i()

  • 相关阅读:
    指针应用-----链表一
    指针(五)
    指针(四)
    指针(三)
    指针(二)
    指针(一)
    [代码应用]javaSE程序递归删除文件夹下的.bak文件程序源代码
    [ExtJS5学习笔记]第十八节 Extjs5的panel的dockeditems属性配置toolbar
    [ExtJS5学习笔记]第十七节 Extjs5的panel组件增加accodion成为折叠导航栏
    [ExtJS5学习笔记]第十六节 Extjs5使用panel新增的ViewModel属性绑定数据
  • 原文地址:https://www.cnblogs.com/liuwei0824/p/7240120.html
Copyright © 2011-2022 走看看