六、函数进阶

1. 函数的多返回值

复杂业务情况,函数可以有多个返回值,类型也不限制。

语法是 return 返回值1,返回值2,...返回值n

def test():
	return 1, "python222", True

调用函数返回类型是元组tuple类型,当然我们也可以通过多个变量接收也行;

示例:

def test():
    return 1, "python222", True

# 返回元组类型
result = test()
print(f"result={result},type={type(result)}")
# 通过多个变量接收
a, b, c = test()
print(a, b, c)

执行结果:

image-20240722144335647

2. 函数的不定长参数

前面我们学过位置参数,关键字参数,默认值参数。 现在我们再学习一个不定长参数,主要用于不确定调用的时候会传递多少个参数的场景。

不定长参数的类型也分为位置传递关键字传递 两种。

不定长参数(位置传递)

我们通过元组tuple类型的 *args 来实现,具体看下实例:

def test(*args):
	print(args, type(args))
test(1, "2")
test(True, 1, "2", 3.14)
test()

执行结果:

image-20240722144902909

不定长参数(关键字传递)

我们通过字典dict类型的 **kwargs 来实现,具体看下实例:

def test2(**kwargs):
    print(kwargs, type(kwargs))
test2(name="Jack", age=11)
test2()

执行结果:

image-20240722145141123

3. 使用函数变量

Python的函数也是一种值:所有函数都是function对象,这意味着可以把函数本身赋值给变量。

示例:

# 定义计算两个参数相加的函数
def add(x, y):
    return x + y
# 将add函数赋值给my_func,则my_func可以被当做add使用
my_func = add
# 调用my_func函数
print(my_func(1, 2))

输出: 3

4. 使用函数作为函数形参

有时候需要定义一个函数,该函数的大部分计算逻辑都能确定,但某些处理逻辑暂时无法确定——这意味着某些程序代码需要动态改变,如果希望调用函数时能动态传入这些代码,那么就需要在函数中定义 函数形参,这样即可在调用该函数时传入不同的函数作为参数,从而动态改变这段代码。

示例:

def test(x, y, fn):
	return fn(x, y)
def add(x, y):
	return x + y
def sub(x, y):
	return x - y
print(test(2, 1, add))
print(test(2, 1, sub))

执行结果:

image-20240722151601617

5. 使用函数作为返回值

Python还支持使用函数作为其他函数的返回值

def test(bol):
    if bol:
        return add
    else:
        return sub
def add(x, y):
    return x + y
def sub(x, y):
    return x - y
b1 = test(True)
print(b1, b1(1, 2))
b2 = test(False)
print(b2, b2(1, 2))

执行结果:

image-20240722152031493

6. lambda匿名函数

前面我们所学的函数定义,都是有函数名的。 我们现在学的lambda函数 是没有名称的,也就是匿名函数 。 我们在只需要一次性使用的函数的时候,就可以用lambda匿名函数,简单方便快捷。

lambda匿名函数语法: lambda 传入参数:函数体

注意: 函数体只能写一行,不支持多行

def test(x, y, fn):
    return fn(x, y)

def sub(x, y):
    return x - y
print(test(2, 1, lambda x, y: x * y))
print(test(2, 1, sub))

执行结果:

image-20240722152751517

最近一次更新 3/20/2025, 7:54:12 AM