函数对象
函数是第一类对象
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