6.Python 函数进阶(函数多返回值、函数多种传参方式、匿名函数)
一、函数多返回值
1、具体实现
def test_return():
return 1, 2
x, y = test_return()
print(x)
print(y)
1
2
2、解析
按照返回值的顺序,用对应顺序的多个变量接收,变量之间用逗号(,)隔开
支持返回不同类型的数据
二、函数多种传参方式
1、位置参数
(1)基本介绍
调用函数时根据函数定义的参数位置来传递参数
注:传递的参数和定义的参数的顺序及个数必须一致
(2)基本使用
def user_info(name, age, gender):
print(f"您的名字是:{name},年龄是:{age},性别是:{gender}")
user_info("jack", 20, "男")
user_info("mery", 18, "女")
user_info("tom", 25, "男")
您的名字是:jack,年龄是:20,性别是:男
您的名字是:mery,年龄是:18,性别是:女
您的名字是:tom,年龄是:25,性别是:男
2、关键字参数
(1)基本介绍
函数调用时通过“【键】 = 【值】”形式传递参数
关键字函数可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求
注:函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序
(2)基本使用
def user_info(name, age, gender):
print(f"您的名字是:{name},年龄是:{age},性别是:{gender}")
# 关键字传参
user_info(name = "jack", age = 20, gender = "男")
# 关键字传参,可以不按照固定顺序
user_info(age = 18, name = "mery", gender = "女")
# 可以和位置参数混用,位置参数必须在前,且对应参数位置
user_info("tom", age = 25, gender = "男")
您的名字是:jack,年龄是:20,性别是:男
您的名字是:mery,年龄是:18,性别是:女
您的名字是:tom,年龄是:25,性别是:男
3、缺省参数
(1)基本介绍
缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值
当调用函数时没有传递参数时,就会使用默认是用缺省参数对应的值
注:所有位置参数必须出现在默认参数前,包括函数定义和调用
(2)基本使用
def user_info(name, age, gender, vipLevel = 0):
print(f"您的名字是:{name},年龄是:{age},性别是:{gender},vip 等级是:{vipLevel}")
user_info("jack", 20, "男")
user_info("mery", 18, "女", 1)
user_info("tom", 25, "男", 2)
您的名字是:jack,年龄是:20,性别是:男,vip 等级是:0
您的名字是:mery,年龄是:18,性别是:女,vip 等级是:1
您的名字是:tom,年龄是:25,性别是:男,vip 等级是:2
4、不定长参数
(1)基本介绍
不定长参数也叫可变参数. 用于不确定调用的时会传递多少个参数(不传参)的场景
不定长参数的类型有位置传递和关键字传递
类型 | 说明 |
---|---|
位置传递 | 所有参数都会被 args 变量收集,同时根据传进参数的位置合并为一个元组 |
不定长传递 | 参数是“【键】 = 【值】”形式的情况下, 所有的键值对都会被 kwargs 变量收集, 同时组成字典 |
(2)基本使用
print("不定长参数 - 位置传递 ------------------------------")
def get_Info1(*args):
print(args, type(args))
get_Info1("tom")
get_Info1("jack", 18)
print(" 不定长参数 - 关键字传递 ------------------------------")
def get_Info2(**kwargs):
print(kwargs, type(kwargs))
get_Info2(name = "mery")
get_Info2(name = "jerry", age = 20)
不定长参数 - 位置传递 ------------------------------
('tom',) <class 'tuple'>
('jack', 18) <class 'tuple'>
不定长参数 - 关键字传递 ------------------------------
{'name': 'mery'} <class 'dict'>
{'name': 'jerry', 'age': 20} <class 'dict'>
三、匿名函数
1、函数作为参数传递
(1)基本介绍
在前面的函数学习中,我们一直使用的函数,都是接受数据作为参数传入,有:数字、字符串、列表、元组、字典等
其实,函数本身也可以作为参数传入另一个函数内
(2)具体实现
def test_func(compute):
result = compute(10, 20)
print(result)
def compute1(num1, num2):
return num1 + num2
test_func(compute1)
def compute1(num1, num2):
return num1 * num2
test_func(compute1)
30
200
(3)解析
-
test_func 函数需要一个函数作为参数传入,这个传入的函数需要接收两个数字进行计算,计算逻辑由这个被传入函数决定
-
compute1 / compute2 函数接收两个数字对其进行计算,compute 函数作为参数,传递给 test_func 函数
-
在 test_func 函数内部,由传入的 compute 函数,完成对数字的计算操作
(4)小节
2、lambda 匿名函数
(1)基本介绍
函数的定义 | 说明 |
---|---|
def 关键字 | 可以定义带有名称的函数,有名称的函数,可以基于名称重复使用 |
lambda 关键字 | 可以定义匿名函数(无名称),匿名函数,只可临时使用一次 |
(2)匿名函数的定义
lambda 【传入参数】:【函数体(一行代码)】
lambda 是关键字,表示定义匿名函数
传入参数表示匿名函数的形参,如:num1、num2,表示接收两个形参
函数体,就是函数的执行逻辑,只能写一行,无法写多行代码
(3)基本使用
def test_func(compute):
result = compute(20, 30)
print(result)
# 通过 lambda 关键字,传入一个一次性使用的 lambda 匿名函数
test_func(lambda num1, num2: num1 + num2)
test_func(lambda num1, num2: num1 - num2)
50
-10
作者:我命由我12345