一、函数定义:
-
def:表示函数的关键字
-
函数名:函数的名称,日后根据函数名调用函数
-
函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...
-
参数:为函数体提供数据
-
返回值:当函数执行完毕后,可以给调用者返回数据。
二、函数结构
def 函数名():
... 函数体
...
例如:
#输出字符串长度
s ='adaijdia' def my_len(s): i = 0 for k in s: i+=1 return i a = my_len(s)#8 print(a)
三、返回值(return)的三种情况
1.没有返回值---返回None
#不写return
#只写return:结束一个函数的继续
#return None
2.返回一个值:
#可以返回任何数据类型
#只要返回就可以接受到
#如果在一个程序中有多个return,那么只执行第一个
3、返回多个值:
#用多个变量接受:有多少返回值就用多少变量接收
#用一个变量接收:得到的是一个元祖
四、参数
4.1、参数定义
1.形参:
#写在函数声明的位置的变量叫形参,形式上的一个完整.表示这个函数需要xxx
2.实参:
#在函数调用的时候给函数传递的值.加实参,实际执行的时候给函数传递的信息.表示给函数xxx
函数的传参就是函数将实际参数交给形式参数的过程.
#输出字符串长度 s ='adaijdia' def my_len(s): #接收参数,形式参数,形参 i = 0 for k in s: i+=1 return i a = my_len(s) #传递参数:传参,实际参数,实参 print(a)#8
4.2、站在实参的角度上,传参数
1.按位置传参数
2.按关键字传参数
3.混合传参(必须先按位置传参,再按关键字传参数!)
#站在实参的角度上,传参数 def s(a,b): result = a-b return result s1 = s(2,3)#按位置传参数 s2 = s(b = 3,a = 2)#按关键字传参数 s3 = s(2,b = 3)#混合传参(必须先按位置传参,再按关键字传参数!) print(s1,s2,s3)#-1 -1 -1
4.3、站在行参的角度上,传参数
1.位置参数:必须传,有几个参数就传几个值
2.默认参数:可以不传,如果不传就是默认的参数,如果传了就用传的
#站在行参的角度上,传参数 def classmate(name,index='男'): print('{}:{}'.format(name,index)) classmate('wws')#wws:男 classmate('db','女')#db:女
五、命名空间
5.1内置命名空间 ——— python解释器
#就是pytho解释器一启动就可以使用的名字存储在内置命名空间里
#内置的名字在启动解释器的时候被加载进内存里
5.2 全局命名空间 —— 我们写的代码但不是函数中的代码
#是在程序从上到下被执行的过程中一次加载进内存的
#放置了我们设置的所有变量名和函数名
5.3 局部命名空间 —— 函数
#就是函数内部定义的名字
#当调用函数的时候 才会产生这个命名空间 随着函数执行的结束 这个命名空间就消失了
六、作用域
6.1 分类:
1.全局作用域 ——作用在全局 —— 内置和全局名字空间中的名字都属于全局作用域 ——globals() #永远打印全局的名字
2.局部作用域 —— 作用在局部 —— 函数(局部名字空间中的名字属于局部作用域) ——locals() #输出什么 根据locals所在位置
6.2 注意点:
1.对于不可变数据类型 在局部可是查看全局作用域中的变量
2.但是不能直接修改
3.如果想要修改,需要在程序的一开始添加global声明
七、nonlocal:声明一个上面第一层局部变量
i = 1 def s(): i = 1 def s1(): i = 2 def s2(): nonlocal i i+=2 print('s2:',i)# s2: 4 s2() s1() s() print('s:',i) # s: 1
八、函数名
8.1 函数名可以赋值
#函数名可以赋值 def func(): print('123') func1 = func func1() #123
8.2 函数名作为容器类型的元素
#函数名作为容器类型的元素 def func(): print('123') func1 = func l = [func1,func] for i in l: i() # 123 # 123
8.3函数名可以作为函数的参数
#函数名可以作为函数的参数 def func(): print('123') def func2(s): return s conturn = func2(func) conturn()#123
九、闭包
1.闭包是嵌套在函数中的函数。
2. 闭包必须是内层函数对外层函数的变量(非全局变量)的引用。
# 闭包 def outer(): i = 1 def inter(): print(i) return inter s = outer() s()# 1