Python 测开27期 - WL - 学习笔记 - python 函数进阶与参数处理

python 函数进阶与参数处理

可变参数

  • 可变参数也称为不定长参数
  • 传入函数中实际参数可以是任意多个
  • 常见形式
    ** *args
    ** **kwargs

*args

  • 接收任意多个实际参数,并将其放到一个元组中
  • 使用已经存在的列表或元组作为函数的可变参数,可以在列表的名称前加*
    image
# 接收任意多的参数
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

  • 接收任意多个类似关键字参数一样显式赋值的实际参数,并将其放到一个字典中
  • 使用已经存在字典作为函数的可变参数,可以在字典的名称前加**
    image
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)]