函数的定义

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。你已经知道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()

嵌套函数即闭包参考