Python函数的定义与使用
1、函数的分类
内置函数
print id int str max min range
自定义函数
通过关键字def的功能实现python中函数的创建
2、通过关键字def定义函数
def name(args…):
todo something..
返回值
3、关键字def函数的执行
def say_hello():
print('hello world')
say_hello() # 函数名+小括号执行函数
4、函数结果的返回——return
- 将函数结果返回的关键字
- return只能在函数体内使用
- return支持返回所有的python类型
- 有返回值的函数可以直接赋值给一个变量
举例:
def add(a,b):
c = a + b
return c
result = add(a=1, b=1) #参数按顺序传递
print(result)
- return与print的区别
- print只是单纯的将对象打印,不支持赋值语句
- return是对函数执行结果的返回,也支持赋值语句
5、函数的传参
形参与实参
函数名中定义的参数为形参,在函数调用的时候,给函数名中的形参传递的参数为实参
必传参数
在定义函数的时候,没有默认值且必须在函数执行的时候传递进去的参数,实参的数量和形参的数量保持一致
- 函数中定义的参数没有默认值,在调用函数时如果不传入则报错
- 在定义函数的时候,参数后边没有等号与默认值
错误:def add(a=1, b=1) x
默认参数
在定义函数的时候,定义的参数含有默认值,就说他是一个默认参数
不确定参数——可变参数
没有固定参数的函数,需要传递不确定参数(不知道要传的参数名具体是什么)
*args 代表: 将无参数的变量合并成元组
**kwargs 代表将有参数与默认值的赋值语句合并成字典
传入元组及列表类型的数据
当调用函数时参数是元组或列表类型的数据时,可以在变量名前添加
*
进行解包传入字典类型的数据
当调用函数时参数是字典类型的数据时,可以在变量名前添加
**
进行解包关键字参数
注意:关键字和形参能够匹配上,并且实参的顺序可以任意
参数规则
def add(a, b=1, *args, **kwargs)
- 参数的定义从左到右依次是 必传参数,默认参数,可变元组参数,可变字典参数
- 函数的参数传递非常灵活
- 必传参数与默认参数的传参多样化
6、函数的参数类型定义
参数类型定义的方法
- 参数名+冒号+类型函数
- 参数名+冒号+类型函数+等号+默认值
def person(name:str, age:int=33): print(name, age)
函数定义在python3.7之后可用
函数不会对参数类型进行验证
7、局部变量与全局变量
全局变量
# coding:utf-8 name = 'david' # 在python脚本最上层代码块的变量就是全局变量 def test(): print(name) # 全局变量可以在函数内被读取使用
局部变量
# coding:utf-8 def test(): name = 'david' # 在函数体内定义的变量就是局部变量 print(name) # 局部变量无法再自身函数以外使用
global
将全局变量可以在函数体内进行修改
# coding:utf-8 name = 'jay' def test(): name = 'david' print(name) test()
以上的全局变量
name
无法在函数体内修改,需使用global
来进行修改,如下# coding:utf-8 name = 'jay' # 定义一个全局变量 def test(): # 定义函数 global name # global+全局变量名 name = 'david' # 函数体内给全局变量重新赋值 print(name) test()
在工作中,不建议使用
global
对全局变量进行修改
8、函数的递归
什么是递归函数
一个函数不停的将自己反复执行
递归的定义方法
# coding:utf-8 def test(a): print(a) return test(a) # 通过返回值,直接执行自身函数
递归函数的说明
内存溢出
内存溢出简单点说就是内存不够用了,当可使用的内存大于程序需要使用的内存时,就会发生内存溢出的情况。函数调用是通过栈这种数据结构实现的,每分配一个栈就需要消耗一部分内存,在递归调用中,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出
如以下例子,传递参数是 100 时,递归结果为 5050,可以正常算出结果
当传递参数是 1000 时,递归系统报错,超过最大递归深度
避免滥用递归
9、匿名函数lambda
lambda功能
- 定义一个轻量化的函数
- 用即删除,很适合需要完成一项功能,但是此功能只在此一处使用
lambda用法
无参数
f = lambda:value f()
有参数
f = lambda x,y: x*y f(3,4)
转载请注明来源