了解:
命名关键字参数:在定义阶段,*与**之间的参数称之为命名关键字参数
特点:在调用函数时,命名关键字参数必须按照key=value的形式传值
# def func(x,*,y=1,z): # print(x) # print(y) # print(z) # # func(1,z=2) 1 1 2 *后面不加args后面的参数也是命名关键字参数
# def func(a,b=2,*args,c,**kwargs): # print(a) # print(b) # print(args) # print(c) # print(kwargs)
一、函数对象
函数的第一类对象:把函数的内存地址当做变量值一样使用
变量值的使用方法;
1、变量值可以被引用
2、变量值可以当作参数传给另一个函数
3、变量值可以作为函数的返回值
4、变量值可以当做容器类型的元素
二、函数的嵌套
1、定义:在函数内又定义了其他函数
def func(): def foo(): print('from foo') print(foo) foo() x=1 print(x) func()
比如求圆的面积和周长,把关于圆的功能放在一起
# from math import pi # # def circle(radius,action): # def cal_perimeter(): # return 2 * pi * radius # # def cal_area(): # return pi * (radius ** 2) # # if action == 1: # res=cal_perimeter() # elif action == 2: # res=cal_area() # return res # # res=circle(10,1) # print(res)
三、名称空间与作用域
1、名称空间namespaces:指的就是存放名字与值内存地址绑定关系的地方(内存空间)
2、名称空间分为三大类
(1)内置名称空间:存放的是python解释器自带的名字
产生:python解释器的启动则产生
销毁:python解释器的关闭则销毁
(2)全局名称空间:在顶级定义的名字
x=1 √ # if True: # y=2 √ # while True: # while True: # while True: # z=3 # def func(): √ # pass #
产生:执行python程序时产生
销毁:python程序执行完毕后销毁
(3)局部名称空间:在函数内定义的名字
# def foo(): # m=100 √ # # foo()
产生:在函数调用时临时产生
销毁:在函数调用完毕后则销毁
3、三种名称空间的产生的先后顺序: 内置->全局->局部
查找名字的顺序:从当前位置往外一层一层查找
如果当前在局部名称空间: 局部->全局->内置
如果当前在全局名称空间: 全局->内置
4、作用域:指的是作用范围
全局作用域:包含内置与全局名称空间的名字
特点;(1)在任何位置都能够访问的到
(2)该范围内的名字会伴随程序整个生命周期(全局存活,全局有效)
局部作用域:包含的是局部名称空间的名字
特点:(1)只能在函数内使用
(2)调用函数时生效,调用结束失效
!!!作用域关系是在函数定义阶段就已经固定死了,与调用位置无关
# def f1(): # print(xxx) # xxx=111 # # def f2(): # xxx=222 # f1() # # f2() 111
四、闭包函数
闭:封闭,指的是该函数是定义一个函数内部的函数
包:该内部函数包含对外层函数名字的引用
为函数体传值的两种方式:
方式一、直接以参数的形式传入
# 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()