函数
命名关键字函数:在定义函数时,*与**之间的参数称之为命名关键字函数。
特点:在调用函数时,命名关键字参数必须按照key=value的形式传值。
函数对象
函数第一类对象:指的是函数的内存地址可以像一个变量值一样去使用。
变量值可以被引用;变量值可以当做参数传给另外一个函数;变量值可以当做函数返回值;变量值可以当做容器类型的元素。
函数的嵌套调用:在一个函数内部又调用其他函数。
定义:在函数内又定义了其他函数。
名称空间与作用域
名称空间相关:
名称空间(Namespaces):指的就是存放名字与值内存地址绑定关系的地方(内存空间)
名称空间分为三大类:内置名称空间:存放的是python解释器自带的名字。
产生:python解释器启动时,产生。
销毁:python解释器关闭时,销毁。
全局名称空间:在顶级定义的名字。
产生:执行python程序时,产生。
销毁:python程序执行完之后,销毁。
局部名称空间;在函数内定义的名字。
产生:在函数调用时,临时产生。
销毁:在函数调用完毕后,则销毁。
(三种名称空间的产生的先后顺序:内置=>全局=>局部)
(查找名字的顺序时:从当前位置往外一层一层查找)
(如果当前在局部名称空间:局部=>全局=>内置)(如果当前在全局名称空间:全局=>内置)
作用域
作用域指的是作用范围(!!!作用域关系是在函数定义阶段就已经固定死了,与调用位置无关!!!)
全局作用域:包含内置与全局名称空间的名字。
特点:全局存活,全局有效。
局部作用域:包含局部名称空间的名字。
特点:临时存活,局部有效。
闭包函数
闭:封闭,指的是该函数是定义一个函数内部的函数。
包:该内部函数包含对外层函数名字的引用。
函数传值的两种方式:直接以参数的形式传入。
例:def foo(name):
print('hello %s' %name)
foo('egon')
foo('egon')
foo('egon')
闭包函数。
例:def outter(name):
# name='egon'
def foo():
print('hello %s' %name)
return foo
f=outter('egon')
# print(f)
f()
f()
f()
f1=outter('alex')
f1()
f1()
f1()