函数嵌套及作用域

 

一、三元运算

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

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

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

原文地址:https://www.cnblogs.com/chris3201/p/8986928.html