传送门==>B站黑马python入门教程
目录
- [1. 函数的多返回值](#1. 函数的多返回值)
- [2. 函数的不同传参](#2. 函数的不同传参)
- [3. 函数作为参数传递](#3. 函数作为参数传递)
- [4. 匿名函数](#4. 匿名函数)
1. 函数的多返回值
若一个函数写了两个return时,程序如何执行?
python
def get_info():
return "张三"
return 20
info = get_info()
print(info)
我们发现函数执行到第一个return时,程序就退出了;
如果一个函数要多个返回值,如何写代码
按照返回值的顺序,写对应顺序的多个变量接收即可;
变量之间可以用多个逗号分隔;
支持不同类型的数据return;
python
# 示例;
def demo_return():
return 1,2,"张三"
# 调用函数
a,b,c = demo_return()
print(a)
print(b)
print(c)

2. 函数的不同传参
在使用方式上的不同,函数有4中常见的参数使用方式;
- 位置参数;
- 关键字参数;
- 缺省参数;
- 不定长参数;
位置参数 :调用函数时根据函数定义的参数位置来传递参数;
注:函数定义的参数顺序必须与调用函数时传递的参数顺序一致
python
def user_info(name,age,gender):
"""
打印用户信息
:param name: 用户名
:param age: 用户年龄
:return:
"""
print("用户名:",name)
print("用户年龄:",age)
print("用户性别:",gender)
user_info("张三",18,"男")
关键字参数:函数调用时通过 "键值对"的形式传递参数;
作用:可以让函数更加清晰,容易使用,同时也清除了参数的顺序需求;
注:函数在调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序
python
def user_info(name,age,gender):
"""
打印用户信息
:param name: 用户名
:param age: 用户年龄
:return:
"""
print("用户名:",name)
print("用户年龄:",age)
print("用户性别:",gender)
# 关键字传参:
user_info(name="张三",age=18,gender="男")
# 当然,可以不按照固定顺序;
user_info(gender="男",name="张三",age=18)
# 也可以和位置参数混合使用,位置参数在前面,且匹配参数顺序使用;
user_info("张三",gender="男",age=18)
缺省参数 : 即默认参数,用于定义函数时,为参数提供默认值,调用函数时可以不传默认参数的值;
注:所有位置参数都必须出现在默认参数前,包括函数定义和调用;
python
def user_info(name,age,gender="男"):
"""
:param name:
:param age:
:param gender: 默认为 男
:return:
"""
print("用户名:",name)
print("用户年龄:",age)
print("用户性别:",gender)
#
user_info("张三",18)
user_info("张三",18,"女")
# 年龄没有默认值,调用就会报错;
user_info("张三")

不定长参数 : 即可变参数,用于定义函数时,为参数提供默认值,调用函数时可以不传默认参数的值;
作用:当调用函数时不确定参数个数时,可以使用不定长的参数;
不定长参数的类型:
- 位置传递,
- 关键字传递
位置传递注:传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组,args是元组类型;
python
def user_info(* args):
print("用户信息:",args)
# 调用;
user_info("张三")
user_info("张三","男")
user_info("张三","男",18)
user_info("张三","男",18,"上海")
user_info("张三","男",18,"上海","中国")
user_info("张三","男",18,"上海","中国","中国")

关键字传递
注:参数是'键=值'形式的情况下,所有的'键=值'都会被kwargs接受,同时根据'键=值'组成字典
python
def user_info(** kwargs):
print("用户信息:",kwargs)
#
user_info(name="张三")
user_info(name="张三",age=18)
user_info(name="张三",age=18,gender="男")
user_info(name="张三",age=18,gender="男",city="上海")
user_info(name="张三",age=18,gender="男",city="上海",country="中国")

3. 函数作为参数传递
在前面的函数学习中,我们一直使用的函数,都是接受数据作为参数传入:
- 数字
- 字符串
- 字典,列表,元组等
实际上,学习的函数本身也可以作为参数传入另一个函数内
示例如下代码:
python
def test_func(compute):
res = compute(1,2)
print(f"参数compute类型为:{type(compute)}")
print(res)
def compute(x,y):
return x+y
test_func(compute)

函数compute作为参数,传入test_func函数中使用
- test_func需要一个函数作为参数传入,这个函数需要接收2个数字进行计算,计算逻辑由这个被传入的函数决定
- compute函数接收2个数字对其进行计算,compute函数作为参数,传递到test_func函数使用;
- 最终,在test_func函数的内部,由传入的compute函数,完成对数字的计算操作;
4. 匿名函数
lambda匿名函数
在函数定义中
- def关键字,可以定义带有名称的函数
- lambda关键字,可以定义匿名函数(没有名称)
有名称的函数,可以基于名称重复使用;
无名称的匿名函数,只可以临时使用一次;
匿名函数的定义语法:
lambda 传入参数:函数体(一行代码)
- lambda是关键字,表示定义匿名函数
- 传入参数表示匿名函数的形式参数,例如:x y表示接受2个形式参数;
- 函数体,就是函数的执行逻辑,要注意的是:只能写一行,无法写多行代码
如下代码示例:
可以通过def关键字,定义一个函数,传入;
python
def test_func(compute):
res = compute(1,2)
print(f"参数compute类型为:{type(compute)}")
print(res)
def compute(x,y):
return x+y
test_func(compute)
可以通过lambda关键字,定义一个匿名函数
python
def test_func(compute):
res = compute(1,2)
print(f"参数compute类型为:{type(compute)}")
print(res)
test_func(lambda x,y:x+y)
使用def和lambda定义的函数,功能一样,
只是lambda定义的函数,没有名称,只能使用一次;
