• 函数嵌套及作用域


     

    一、三元运算

      把条件成立的结果放左边,条件不成立的放右边

      res = a if 1>2 else b

    二、命名空间

      全局命名空间:创建的存储“变量名与值的关系”的空间叫做全局命名空间。文件的执行会产生全局名称空间,指的是文件级别定义的名字都会放入全局名称空间。

      局部命名空间:在函数的运行中开辟的临时的空间叫做局部命名空间。

      内置命名空间:内置在python解释器中,拿过来就能使用的叫做内置命名空间。

    三种命名空间之间的加载顺序和取值顺序:

      加载顺序:内置---->全局---->局部---->内置

      取值:在局部调用:局部命名空间--->全局命名空间----->内置命名空间

         在全局调用:全局---->内置----->局部

      使用:

        全局不能使用局部的,局部的可以使用全局的。

    三、作用域:作用范围

      python中函数就是一个作用域,局部变量放置在其作用域中
      代码定义完成后,作用域已经生成,作用域链向上查找

      1、命名空间和作用域的分不开的

      2、作用域分为两种

        全局作用域:全局命名空间与内置命名空间的名字都属于全局范围,在整个文件的任意位置都能被引用,全局有效。

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

      3、站在全局看

        使用名字的时候:如果全局有使用全局的。如果全局没有,用内置的。

      4、使用作用域的好处

        函数内的变量不会影响到全局。

      5、globals方法:查看全局作用域的名字[print(globals())]

        locals方法:查看局部作用的名字[print(locals())]

    def func():
        a = 12
        b = 20
        print(locals())
        print(globals())
    func()
    局部调用locals()和globals()

    站在全局看,globals is locals

      global关键字:强制转换为全局变量。

    name = "Alex"
    def change_name():
        global name
        name = "peiqi"
        print("after change", name,id(name))
    change_name()
    print("在外面看看name改了么?", name,id(name))
    View Code
    names = ['alex','peiqi','egon']  #大的整体,小的元素,字典,列表,set
    def change_names():
        # del names[2]
        names[0] = 'Jack'
        print(names,id(names))
    change_names()
    print(names,id(names))
    View Code
    age = 44
    def func1():
        # age = 33
        # print(age)
        global age
        def func2():
            # age = 22
            print(age)
        age = 66
        func2()
    #如果把age=22 去掉查找到的是两个33,一层一层的往外找
    func1()
    print(age)
    View Code

       作用域链

    age = 18
    def func():
        age = 19
        def func1():
            # age = 20
            print(age)
        return func1
    val = func()
    val()
    View Code

      函数名的本质就是函数的内存地址

    def func():
        print('func')
    print(func)#指向了函数的内存地址
    View Code

    四、函数名可以用作函数的参数

     

    def func():
        print('func')
    
    def func2(f):
        f()
        print('func2')
    func2(func)
    函数名可以用作参数

     函数嵌套定义

    '''1、函数内部可以再次定义函数。2、执行需要被调用'''
    def func():
        print("from func")
        def func_1():
            print("from func_1")
        return func_1()
    func()
    函数嵌套

     作用域:每个函数都是一个作用域,作用域链查找是从小到大的顺序。

  • 相关阅读:
    〖Linux〗Kubuntu设置打开应用时就只在打开时的工作区显示
    〖Linux〗Kubuntu, the application 'Google Chrome' has requested to open the wallet 'kdewallet'解决方法
    unity, dll is not allowed to be included or could not be found
    android check box 自定义图片
    unity, ios skin crash
    unity, Collider2D.bounds的一个坑
    unity, ContentSizeFitter立即生效
    类里的通用成员函数应声明为static
    unity, Gizmos.DrawMesh一个坑
    直线切割凹多边形
  • 原文地址:https://www.cnblogs.com/chris3201/p/8986928.html
Copyright © 2020-2023  润新知