Python函数
什么是函数
函数时一个被命名的,独立完成特定功能的代码段,可能给调用它的程序一个返回值。通俗来讲,就是把一段可以实现某种功能的代码封装起来,想要使用这个功能就可以直接调用函数。
函数的作用
- 模块化编程
- 代码复用
函数定义和调用
- 函数的定义
def 函数名(参数):函数体return 返回值
- 函数的调用
函数名(参数)
注意:
- 根据实际的需求来确定函数是否需要参数
- 函数必须先定义后使用
例1. 定义一个函数,传入两个整数,返回这两个整数相加的和
def add(a,b):sum = a + breturn sum
函数的注释说明
开发人员定义了一个函数,需要为其他人提供这个函数的使用说明,就需要为这个函数写注释说明,要具体写明白函数的作用,参数和返回值
- 格式
在函数内的第一行,用 三引号 的写法来实现,推荐使用双引号
def add(a, b):"""计算两个数的和param a: 第一个数param b: 第二个数return: 两个数的和 """sum = a + breturn sum
函数的参数
参数的可以让函数使用更加灵活,在定义函数的时候,函数中参数叫做形式参数,表示调用函数时需要传入什么值;而在调用函数的时候,函数中的参数叫做实际参数,表示实际参与运算的数据。
函数参数的分类
在函数参数的使用分类上,函数有4中常见参数
- 位置参数
- 关键字参数
- 不定长参数
- 缺省参数
1. 位置参数
调用函数时,根据函数定义的参数位置来传递参数,即传递的参数和定义的参数的顺序及个数必须一致
def user_info(name,age,gender):print(f"您的名字是{name},年龄是{age},性别是{gender}")user_info('Tom',18,'男')
2. 关键字参数
函数调用时,通过 键=值 的形式传递参数,可以让函数更加清晰,容易使用,同时也清除了参数的顺序要求
def user_info(name,age,gender):print(f"您的名字是{name},年龄是{age},性别是{gender}")user_info(name='Rose',gender='女',age=20)
函数调用时,如果有位置参数,位置参数必须在关键字参数的前面,但是关键字参数之间不存在先后顺序
3. 缺省参数
缺省参数也叫默认参数,用于定义函数时为参数提供默认值,调用函数时可以不传入该默认参数的值
def user_info(name,age,gender='男'):print(f"您的名字是{name},年龄是{age},性别是{gender}")user_info('Tom',22)
注意:
- 所有位置参数必须出现在默认参数前,包括函数定义和调用
- 函数调用时,如果为缺省参数传值则修改默认参数值,否则使用这个默认值
4. 不定长参数
不定长参数也叫可变参数,用于不确定调用的时候会传递多少个参数(不传参也可以)的场景
- 位置传递
def user_info(*args):print(args)user_info('Tom') # ('Tom',)
user_info('Tom',18) # ('Tom',18)
传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple),args元组类型,这就是位置传递
- 关键字传递
def user_info(**kwargs):print(kwargs)user_info(name='Tom',age=18,id=1) # {'name:'Tom','age':18,'id':1}
关键字传递,参数是键=值的形式,所有的键=值都会被kwargs接收,同时根据键=值组成字典
变量的作用域
- 变量的作用域指的是变量的作用范围,即变量在哪里可以用,在哪里不可以用,主要分为 局部变量和全局变量
- 局部变量是定义在函数体内部的变量,即只在函数体内部生效,其作用是在函数体内部临时保存数据,函数调用完成后,则销毁局部变量
- 全局变量,是在函数体内外都能生效的变量
- 使用
global
关键字,可以在函数内部声明变量为全局变量
函数的返回值
定义一个函数,这个函数在做了一系列的计算操作之后,将最终的计算结果返回给函数的调用者,这个计算结果就是函数的返回值。
函数返回多个返回值
如果一个函数要返回多个返回值,代码如下
def return_num():return 1,2result = return_num()
print(result) # (1,2)
注意:
return a,b
写法,返回多个数据的时候,默认是元组类型- return 后面可以连接列表、元组或字典,以返回多个值
拆包
对于函数中的多个返回数据,去掉元组、列表或者字典,直接获取里面数据的过程
例1:一个元组中有多个元素,如果想要获取原著中的每一个元素的时候就可以使用拆包获取
my_tuple = (1,3.14,'hello',True)
num,pi,my_str,my_bool = my_tuple
例2.函数拆包,当函数有多个返回值时,返回值会组成一个元组
def return_num():return 100,200
num1,num2 = return_num()
例3. 字典拆包
my_dict = {'name':'张三','age':18}
ret1,ret2 = my_dict
print(ret1) # name
print(ret2) # age
匿名函数
- 定义一个两个数相加的函数
def get_sum(a,b):return a + b
- 使用匿名函数实现两个数相加
get_sum = lambda a,b : a + b
很多时候,匿名函数都是作为一个函数的参数来使用的