1.函数的嵌套调用,在函数内又调用了其他函数
这两个不同的函数。
2.函数的嵌套定义,在函数内又定义了其他函数
名称空间:存放名字与值绑定关系的地方
名称空间分为三类
但凡带名的,全部丢到名称空间里
1.内置名称空间:存放python解释器自带的名字,在解释器启动时就生效,解释器关闭则失效。
(print,len,strip)
2.全局名称空间:文件级别名字,在执行文件的时候生效,在文件结束或者文件执行期间被删除则失效。(例如fun()是全局名称空间,不带()是内存地址)
def func():
name='egon'
del fun
print('==========================================')
print('==========================================')
print('==========================================')
print('==========================================')
print('==========================================')
print('==========================================')
3.局部名称空间:存放函数内定义的名字(函数的参数以及函数内的名字都存放与局部局部名称的空间)
在函数调用时临时生效,函数结束则生效。
加载顺序:内置名称空间-------------->全局名称空间---------------->局部名称空间
查找名字:局部名称空间-------------->全局名称空间---------------->内置名称空间
作用域
全局作用域:包含的是内置名称空间与全局名称空间的名字,(用之前需要定义)
特点
1.在任何位置都能访问的到
2.该范围内的名字会伴随程序整个生命周期
局部作用域:包含的是局部名称空间的名字
特点
1.只能在函数内使用
2.调用函数时生效,调用失败则失效
函数对象
1、可以被引用
2、可以当作参数传递
3、返回值可以是函数
4、可以当作容器类型的元素,可以把函数存放到一个列表里面
闭包函数
1、定义在函数内部的函数,在函数定义阶段就规定死了,与调用的位置无关。
2、并且该函数包含对外部函数作用域中名字的引用,该函数就称为闭包函数。
内部函数引用了外部函数的变量,这就叫做闭包函数。(闭包函数与嵌套函数会混淆)
=============================================================================================
函数嵌套
函数的嵌套调用
def foo():
bar()
函数的嵌套定义
def f1():
def f2():#f2=函数的内存地址
pass
print(f2)
名称空间与作用域
名称空间:存放名字与值绑定关系的地方,x=[1,2,2,2,]
内置名称空间
①存放python解释器自带的名字
②解释器启动则生效,解释器关闭则失效
全局名称空间
:存放文件级别的名字
局部名称空间
:存放函数内定义的名字
函数调用时生效,函数调用结束则失效
加载顺序:
加载顺序------->内置-------->全局--------->局部
名字的查找顺序:局部->全局->局部
# x=0 def f1(): # x=1 def f2(): # x=2 def f3(): # x=3 def f4(): # x=4 print(x) f2() f1()
作用域关系是在函数定义阶段就规定死了,与调用位置无关,
也就是说,无论函数在哪调用,都必须回到当初定义函数时的位置找作用域关系
=============================================================================================================
作用域:
全局作用域:包含的是内置名称空间与全局名称空间的名字,
特点:
1.在任何位置都能访问的到
2.该范围内的名字会伴随程序整个生命周期
局部作用域:包含的是局部名称空间的名字
特点:
1.只能在函数内使用
2.调用函数时生效,调用结束失效
==============================================================================================================
函数对象
1.可以被引用
2.可以当中参数传给另外一个函数
3.可以当中函数的返回值
4.可以当中容器类型的元素
闭包函数
定义在函数内部的函数,并且该函数包含对外部函数的作用域(强调:对全局作用域名字的引用不算闭包),该函数称为闭包函数
def outter(): x=1 def=inner(): print(x) return inner
闭包函数永远以自己包裹的状态为准