函数
定义函数
#定义一个函数
def func():
'''函数体'''
return
- 形参
- 实参
- 返回值
- 函数体
参数
- 没有参数
- 一个参数
- 多个参数 -必须先位置参数,在动态参数,再关键字参数 def func(n, *args, i=1)
-
位置传参 -必须按照位置数量传实参
def func(a, b): return a+b #调用函数 print(func(1, 2)) #意思就是a = 1, b = 2 #结果 3
-
关键字传参
-
默认参数可以不传实参
-
可以不按照顺序进行传实际参数
def func(a, b=2): return a+b #调用函数 print(func(1)) #这里只传入一个参数,另外一个参数默认为2 #结果 3
-
-
动态参数
-
参数名之前用*
-
传进去是一个元组
-
接受除了关键字参数的所有的参数
def func(*args) # *必须有,args是变量可以更换 for i in args j += i return j #调用函数 print(func(1, 2, 3, 4)) #这里传入多个实际参数值 #结果 1+2+3+4 10
-
传入多个关键字参数 **kwargs
-
传入的值是字典
def func(**kwargs): for i in kwargs: print(i.key(), i.value()) #调用函数 func(a=1, b=2, c=3) #结果 a, b, c 1, 2, 3
-
-
动态传参数技巧
-
给实际参数加*
li = [1, 2, 3, 4, 5] func(*li) #将列表作为实际参数传入函数中
-
-
-
函数的注释
def func():
'''
这里写注释
函数的功能
参数1:
参数2:
return值的类型
'''
命名空间和作用域
-
内置命名空间
- python解释器自带的函数名,变量等
- print, input, len, str, int, list, tuple
-
全局命名空间
- 程序自上而下执行加载至内存的变量
- 放置我们自定义的变量名和函数名
-
局部命名空间
-
函数内部定义的变量名
-
调用函数时才能产生这个内存空间,随着函数调用的结束,内存回收
a = 1 b = 2 def test(a, b): a = 3 b = 4 print(a, b) c = test(b, a) print(c) #结果 3, 4 None # 说明局部变量优先调用
-
-
globle关键字 全局变量
-
nonlocal关键字 引用小局部的变量,向上寻找第一个接受的局部变量
- 嵌套的内函数不能直接修改上层变量
嵌套和作用域链
#套用示范一
def max(a, b):
return a if a>b else b
def the_max(x, y, z):
c = max(x, y)
return max(c, z)
#套用示范二
def outer():
def iner():
print('iner')
iner()
闭包
-
一定是嵌套的函数
-
内部函数一定要调用外部函数的变量
-
闭包的调用上层变量会在程序终止之前存在内存里
def func(): a = 1 def func2(): print(a) return func2 #闭包的通常调用方式 #闭包的调用 inn = func() inn() #func2是闭包 #闭包的查询和确认 print(func2.__closure__) 返回cell为闭包
-
闭包的应用
- 设计函数的模块