函数的定义
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如 print()。但你也可以自己创建函数,这被叫做用户自定义函数。
函数的调用
实际上就是函数名加上小括号,如果不加括号,那么函数名所表示的就是这个函数的内存地址
defnum():print('这是一个函数')
num()#这就是调用了
先定义,后调用defmake():
函数体return 'sdd'ret=make() 定义一个变量用来接收函数的返回值,print(ret) 如果返回值单个是他本身,多个就是一个元组,没有返回值就是None
return和break相似
结束这个函数
函数名+小括号,不管怎什么情况下都是对函数的调用,而且先执行函数,然后再执行调用方法
函数的执行过程
1 定义函数(def)
2 开辟一个内存(用来存放内存总的数据)
3 调用函数()
4 执行函数体(就是执行函数中的代码)
5 小伙函数开辟的内存
函数的参数
形参
在内存中并没有实际的内存空间,一般用来接收调用函数是传递的参数,
实参
在内存中有实际的内存空间,一般用来调用函数时传递给形参的参数
1 位置参数
形参个数顺序,要与实参的个数顺序互相对应
2 默认参数
如果形参有某个值给了值,name这个形参就有了默认参数,实参传递参数时,可以不给这个默认参数传值,如果传值了,就会覆盖吊默认参数的值
3 动态位置参数
动态位置参数一般使用*args表示,可以接受所有的但是不是关键字参数的实参的值
4 动态默认参数(多用于字典)
动态默认参数一般使用**kwargs表示,接受关键参数的实参的值,在使用关键字参数时,给kwargs赋值是,关键字参数不能喝位置参数变量名称相同
参数的接收顺序:
形参:位置>动态参数>默认参数>动态默认参数
实参:位置>关键字参数
def make(a,b,c,*args,**kwargs)print(a,b,c)print(args)print(kwargs)#make(1,2,3,4,5,5,3,[1,2,3,4,1,2,3,],1,2,a=1,b=2,c=3)#在使用关键字赋值时,关键字参数不能和位置参数变量名称相同
make (1,2,3,4,5,[1,2,3,4,1,2],x=1,x =3,y =6)
View Code
*号的使用,
*在形参中表示聚合,在实参中表示打散
li = [1,2,3,4,5,6]def func(*args)print(args)print(*args)#这行会报错,将列表打散成1 2 3 4 ,不受语法支持
func(*li) #*li的值为1 2 3 4 这种类型无法打印,但是可以给形参传递
函数的注释
官方推荐使用三个双引号
可以使用函数名+.__doc__查看函数的注释
defaaa(user,pwd):"""登录函数
:param user :用户名
:param pwd : 密码
:return:校验后的账号和密码"""
名称空间/命名空间
Local,局部命名空间,每个函数所拥有的命名空间,记录了函数中定义的所有变量,包括函数的入参、内部定义的局部变量。
Global,全局命名空间,每个模块加载执行时创建的,记录了模块中定义的变量,包括模块中定义的函数、类、其他导入的模块、模块级的变量与常量。
Built-in,python自带的内建命名空间,任何模块均可以访问,放着内置的函数和异常
加载顺序
1内置空间
2全局空间
3局部空间
取值顺序
使用变量时,系统查找变量的远近
1局部空间
2全局空间
3内置空间
4找不到会报错
作用域:
全局作用域
全局空间+内置空间
局部作用域
局部空间
函数的嵌套:
在一个函数内定义一个函数
defa1():print('这就是嵌套函数的第一种')defa2()
:
a1()
或者在一个函数内调用另一函数
defa1():print('这就是嵌套函数的第二种')defa2():
a1()
a2()
嵌套函数即闭包参考