zoukankan      html  css  js  c++  java
  • 函数嵌套及作用域

     

    一、三元运算

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

      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()
    函数嵌套

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

  • 相关阅读:
    (转载)SPSS之判别分析——决策树——以iris.sav为例
    (转载)SPSS之判别分析——以iris.sav为例
    python实现GA求二元函数最大值(来自知乎)
    (转载)Python在数学建模中的简单应用
    (转载)Python3 列表,数组,矩阵的相互转换
    【翻译自mos文章】在RHEL7/OL7上安装Oracle 12.1.0.2的server端或者client时,报须要"compat-libstdc++"包
    Material Design Support 8大控件介绍
    关于程序猿的技术发展讨论
    《C程序猿从校园到职场》带领大家从校园走向职场
    IE8下submit表单没反应
  • 原文地址:https://www.cnblogs.com/chris3201/p/8986928.html
Copyright © 2011-2022 走看看