来源引用网络知识与某站曹老师视频相互结合学习记录,仅供参考!
Python 基础知识
函数进阶
函数的多返回值
在复杂业务情况下,函数是可以有多个返回值的,类型也不限制;
语法是 return 返回值 1,返回值 2,...返回值 n
return 表达式 语句用于退出函数,选择性地向调用方返回一个表达式;不带参数值的 return 语句返回 None;
def apple():
return 1, 'python', True

调用函数返回类型是元组 tuple 类型,元组类型数据再进行取值时通过遍历即可;
# 定义一个多返回值的函数
def apple():
return 1, 'python', True
# 返回元组类型
result = apple()
print(f'result={result},type={type(result)}')
运行输出结果:
result=(1, 'python', True),type=<class 'tuple'>
调用函数返回时通过多个变量进行接收;
# 定义一个多返回值的函数
def apple():
return 1, 'python', True
# 返回元组类型
result = apple()
print(f'result={result},type={type(result)}')
# 通过多个变量接收
a, b, c = apple()
print(f'a={a}, b={b}, c={c}')
运行输出结果:
result=(1, 'python', True),type=<class 'tuple'>
a=1, b=python, c=True
函数的不定长参数
在之前学习 Python 基础知识 3--函数时有介绍过位置参数,关键字参数,默认值参数;所以现在开始学习一个不定长参数,它主要是用于不确定调用的时候会传递多少个参数的测试场景(可能需要一个函数能处理比当初声明时更多的参数,这种参数叫做不定长参数,声明时不会命名);不定长参数的类型分为位置传递和关键字传递两种。
不定长参数(位置传递)
加了星号 *(一个 * 星号)的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数;
如果在函数调用时没有指定参数,它就是一个空元组。我们也可以不向函数传递未命名的变量;
一般通过元组 tuple 类型的 *args 来实现;
def apple(*args):
print(args, type(args))
apple(1, '2', "3")
apple(True, 1, '456', 3.1415926)
# 可不传任何参数,返回一个空的元组
apple()
运行输出结果:
(1, '2', '3') <class 'tuple'>
(True, 1, '456', 3.1415926) <class 'tuple'>
() <class 'tuple'>
不定长参数(关键字传递)
加了两个星号 ** 的参数会以字典的形式导入,可以通过字典 dict 类型 **kwargs 来实现;
def apple(**kwargs):
print(kwargs, type(kwargs))
apple(name="张三", age=11)
apple()
运行输出结果:
{'name': '张三', 'age': 11} <class 'dict'>
{} <class 'dict'>
使用函数变量
Python 语言中的函数也是一种值;所有函数都是 function 对象,这意味着可以把函数本身赋值给变量;
# 定义计算两个参数相加的函数
def add(x, y):
return x + y
# 将add自定义函数赋值给my_add,则my_add可以被当做是"add"使用
my_add = add
# 调用my_add函数
print(my_add(2, 3))
print(add(1, 1))
运行输出结果:
5
2
使用函数作为函数形参
有些时候可能需要定义一个函数,该函数的大部分计算逻辑都能确定,但某些处理逻辑暂时无法确定,这意味着某些程序代码需要动态改变时,如果希望调用函数时能动态传入这些代码,那么就需要在函数中定义函数形参,这样即可在调用该函数时传入不同的函数作为参数,从而动态改变这段代码。
1、def func(): --自定义一个函数;
2、def func(x, y): --比如说有两个参数,分别是 x 和 y;
3、def func(x, y, fn): --但是此时具体还不知道 x 和 y 是怎么处理?可以是做加法处理,也可以是做减法处理,只有在调用时才能够确定,这时的话只要直接传入一个函数参数 fn(自定义) 就行了;把函数传进去操作即可;
4、return fn() --然后 return,fn()做为函数;
5、return fn(x, y) -- fn 就是一个函数,然后操作,返回结果;
6、再自定义两个,一个定义加法、一个定义减法;
7、执行调用(在调用时才确认需要调用哪个方法);
# 自定义函数
def func(x, y, fn):
return fn(x, y)
# 定义加法
def add(x, y):
return x + y
# 定义减法
def sub(x, y):
return x - y
# 调用加法
print(func(2, 1, add))
# 调用加法
print(func(2, 1, sub))
运行输出结果:
3
1
使用函数作为返回值
在 Python 语言中还支持使用函数作为其他函数的返回值(一般用的不多,学习了解);
1、def func(bol): --自定义一个函数,返回类型是布尔类型;
2、根据实际业务选择(传来参数或者里面做一大堆业务逻辑),例如做一个判断;
3、根据 bol 类型返回一个方法;如果 bol 类型是 True 就返回 add 方法,若是 False 就返回减法;(这里举例是一个简单逻辑,可根据实际选择,在一大堆业务逻辑操作中根据不同的情况返回多种方法)
# 自定义函数
def func(bol):
if bol:
return add
else:
return sub
def add(x, y):
return x + y
def sub(x, y):
return x - y
b1 = func(True)
print(b1, b1(1, 2))
b2 = func(False)
print(b2, b2(1, 2))
运行输出结果:
<function add at 0x0000023C5B589080> 3
<function sub at 0x0000023C5B505A80> -1
lambda 匿名函数
上面所介绍的函数定义都是有函数名的,现在开始学习的 lambda 函数是没有名称的,也就是匿名函数。
在只需要一次性使用的函数的时候,就可以用 lambda 匿名函数,简单方便快捷;
lambda 匿名函数语法:lambda 传入参数:函数体
注意:函数体只能写一行,不支持多行;
# 自定义函数
def func(x, y, fn):
return fn(x, y)
# 使用lambda匿名函数
print(func(2, 1, lambda x, y: x + y))
运行输出结果:
3
其他,把 sub 函数变量传参改成 lambda 匿名函数传参;
# 自定义函数
def func(x, y, fn):
return fn(x, y)
# 使用lambda匿名函数
print(func(2, 1, lambda x, y: x - y))
运行输出结果:
1
Python lambda(匿名函数)
Python 使用 lambda 来创建匿名函数,lambda 函数是一种小型、匿名的、内联函数,它可以具有任意数量的参数,但只能有一个表达式;匿名函数不需要使用 def 关键字定义完整函数,lambda 函数通常用于编写简单的、单行的函数,通常在需要函数作为参数传递的情况下使用;例如在 map()、filter()、reduce() 等函数中。
lambda 函数特点:
-
lambda 函数是匿名的,它们没有函数名称,只能通过赋值给变量或作为参数传递给其他函数来使用。
-
lambda 函数通常只包含一行代码,这使得它们适用于编写简单的函数。
lambda arguments: expression
lambda是 Python 的关键字,用于定义 lambda 函数。
arguments 是参数列表,可以包含零个或多个参数,但必须在冒号(:)前指定。
expression 是一个表达式,用于计算并返回函数的结果。
没有参数的 lambda 函数
# 没有参数的 lambda 函数
myla = lambda: "Hello, World!!"
# 打印输出
print(myla())
运行输出结果:
Hello, World!!
使用 lambda 创建匿名函数;
# 设置一个函数参数 a,函数计算参数 a 加 50,并返回结果:
myla = lambda a : a + 50
# a=5
print(myla(5))
运行输出结果:
55
设置多个参数的 lambda 函数
# 设置函数参数 a和b 相乘,并返回结果:
myla = lambda a, b : a * b
# a=10,b=20
print(myla(10, 20))
运行输出结果:
200
lambda 函数也可以设置多个参数,参数使用逗号 , 隔开;
# 设置函数参数 a、b 和 c 相加,并返回结果:
myla = lambda a, b, c : a + b + c
# a=1,b=2,c=3
print(myla(1, 2, 3))
运行输出结果:
6
lambda 函数通常与内置函数如 map()、filter() 和 reduce() 一起使用,以便在集合上执行操作。
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))
print(squared)
运行输出结果:
[1, 4, 9, 16, 25]
使用 lambda 函数与 filter() 一起,筛选偶数;
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)
运行输出结果:
[2, 4, 6, 8]
使用 reduce() 和 lambda 表达式演示如何计算一个序列的累积乘积;
# 导包
from functools import reduce
numbers = [1, 2, 3, 4, 5]
# 使用 reduce() 和 lambda 函数计算乘积
product = reduce(lambda x, y: x * y, numbers)
print(product)
运行输出结果:
120
reduce() 函数通过遍历 numbers 列表,并使用 lambda 函数将累积的结果不断更新,最终得到了 1 * 2 * 3 * 4 * 5 = 120 的结果。
未完待续......