python 函数进阶与参数处理
可变参数
- 可变参数也称为不定长参数
- 传入函数中实际参数可以是任意多个
- 常见形式
** *args
** **kwargs
*args
- 接收任意多个实际参数,并将其放到一个元组中
- 使用已经存在的列表或元组作为函数的可变参数,可以在列表的名称前加*
# 接收任意多的参数
def langus(*args):
print(args)
for i in args:
print(i)
ss = []
a = 0
for i in range(1, 5):
ss.append(a)
i = i + 1
a = a + 1
langus(ss)
'''
结果是:
([0, 1, 2, 3],)
[0, 1, 2, 3]
'''
langus(*ss)
'''
结果是:
([0, 1, 2, 3],) 0 1 2 3
'''
langus('aaaa','ddd','dddaaa')
# 结果是:('aaaa', 'ddd', 'dddaaa') aaaa ddd dddaaa
langus(1,2,3,4,5,)
# 结果是:(1, 2, 3, 4, 5) 1 2 3 4 5
**kwargs
- 接收任意多个类似关键字参数一样显式赋值的实际参数,并将其放到一个字典中
- 使用已经存在字典作为函数的可变参数,可以在字典的名称前加**
def inf(**kwargs):
print(kwargs)
inf(tma=22, asd=33) # 结果是:{'tma': 22, 'asd': 33}
ss = {"name": "大话西游Ⅱ", "level": 22, "baby": "黄金兽"}
inf(ss)# 报错为:TypeError: inf() takes 0 positional arguments but 1 was given
inf(**ss) # 结果是: {'name': '大话西游Ⅱ', 'level': 22, 'baby': '黄金兽'}
pythonlambda表达式
匿名函数
- 没有名字的函数
- 用lambda表达式创建匿名函数
使用场景
- 需要一个函数,但是又不想费神去命名这个函数
- 通常在这个函数只使用一次的场景下
- 可以指定短小的回调函数
语法
- result:调用lambda表达式
- [arg1[,arg2,arg3,…,argn]]:可选,指定要传递的参数列表
- expression:必选,指定一个实现具体功能的表达式
import math
# 常规写法
def ares(r):
'''
计算圆的半径
:param r:半径
:return:
'''
result = math.pi*r*r
return result
r = 10
print(f"{r}半径的圆的面积是:{ares(r)}") # 结果是:10半径的圆的面积是:314.1592653589793
# 用lambda表达式
result = lambda r:math.pi*r*r
print(f"{r}半径的圆的面积是:{result(r)}") # 结果是:10半径的圆的面积是:314.1592653589793
print(lambda r:math.pi*r*r) # 结果是内存地址:<function <lambda> at 0x0000015F5A1291C0>
实例:对获取到的信息进行排序
#对获取到的信息排序
book = [("python零基础",22.3),("java零基础",21.9),("c++零基础",19.9)]
print(book) # 结果是:[('python零基础', 22.3), ('java零基础', 21.9), ('c++零基础', 19.9)]
# 价格排序
# lambda x:(x[1]) 返回了每个元组中的第二个元素
book.sort(key= lambda x:(x[1]))
print(book) # 结果是:[('c++零基础', 19.9), ('java零基础', 21.9), ('python零基础', 22.3)]