函数对象

函数是第一类对象

1、函数名是可以被引用的

2、函数名可以当参数使用

3、函数名可以当作返回值使用

4、函数名可以被当做容器类型的元素

PS:传参的时候没有特殊需求,一定不要加括号,加括号会当场执行

函数的嵌套调用:在函数内调用函数

def index():
    def home():
        print('from home')
    home()
index()


打印结果:
from home

名称空间:存放名称的空间

名称空间的分类

1、内置名称空间

在python提前给定义完的名字,就是存在的内置名称空间

2、全局名称空间

存放于文件及的变量名字,就是全局名称空间

if,while,for内容定义的名字执行之后都存放于全局

3、局部名称空间

函数内部的所有名字都是存放于当前函数的内置名称空间

生命周期

1、内置名称空间

在python解释器启动时候生效,关闭解释器失效

2、全局名称空间

当你启动当前py文件时生效,当前页面代码执行结束后失效

3、局部名称空间

当你调用当前函数时生效,函数体代码左后一行执行结束后就失效

名称空间的查找顺序

局部:局部——>>>全局——>>>内置

全局:全局——>>>内置

内置:找不到就会报错

PS:函数内部使用的名字,在定义阶段已经规定了,与你的调用位置无关

作用域

作用域的分类:

1、全局作用域

全局作用域可以调用的名字就存在于全局作用域

内置名称空间 + 全局名称空间

2、局部作用域

局部可以调用的名字就存放于局部作用域

局部名称空间

关键字

global:声明全局变量

x = 1
def index():
    global x    # 声明全局变量
    x = 2

index()
print(x)

打印结果
2

nonlocal:在局部名称空间声明局部变量(可变类型除外)可变类型可以在局部修改外部值

def index1():
    x = 1
    def index2():
        nonlocal x    #声明局部变量(改写了上层的值)
        x = 2
    index2()
    print(x)
index1()


打印结果:
2
原文地址:https://www.cnblogs.com/aheng/p/11835741.html