python笔记 参数解构

266 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第28天,点击查看活动详情

0 环境

  • 编辑器:idea或vscode
  • 系统版本:windows10
  • python版本:3.9.6

1 位置参数解构

日常我们使用的方式:函数名(普通变量, 关键字)或者也可以是关键字这类的混合方式,但调用函数,传入列表值,还想保持函数名(参数1,参数2)不变,比较粗暴的方式,函数名(列表值[索引]..),但不够优雅,还好有优雅的解决方式。

初始化列表,变量名解构,函数名传入列表,并且在列表前加入星号,这样子可迭代对象就被解构成为位置参数的,是不是很有意思,参数可以参数名,收集值,不要和解构混肴了。

def positional_parameter_structure(a, b):
    result = a + b
    print(result)
    return result


if __name__ == '__main__':
    tuple_values = [3,4]
    positional_parameter_structure(*tuple_values)

image.png

元组也是可以的。 image.png

可变参数发生在函数定义的时候,而参数解构则发生在函数调用的那刻。也就是说星号,在调用时,是解构,在定义时,是可变。

2 关键字参数解构

有位置参数解构,就会有关键字参数解构。关键字参数解构,加两个星号,可把字典解构成关键字参数。

image.png

3 可变参数和解构混用

位置可变参数和解构

def add(*args):
    sum = 0
    for arg in args:
        sum += arg
    print(sum)
    return sum

if __name__ == '__main__':
    values = [3, 4, 4, 5, 6]
    add(*values)

image.png

关键字解构和关键字可变参数混用 image.png

4 总结

我也试过,列表,字典啥的可以直接传进去,不需要星号的那种,用着也没问题。在仔细理清楚解构和可变,确实很有用,比如add(a, b),a和b相加,突然前端说传入数组过来(多选上用到的多,前端也不想解构在传给后端),如果没有解构,是不是要动函数定义,其他地方调用函数的也要改,解构的出现不需要动用定义函数那部分,你好我好大家好。