Python学习:多值参数 以及 元组和字典的拆包

提示多值参数 的应用会经常出现在网络上一些大牛开发的框架中,知道多值参数,有利于我们能够读懂大牛的代码

1、多值参数

定义支持多值参数的函数

  • 有时可能需要 一个函数 能够处理的参数 个数 是不确定的,这个时候,就可以使用 多值参数

  • python 中有 两种 多值参数:

    • 参数名前增加 一个 * 可以接收 元组
    • 参数名前增加 两个 * 可以接收 字典
  • 一般在给多值参数命名时,习惯使用以下两个名字

    • *args —— 存放 元组 参数,前面有一个 *
    • **kwargs —— 存放 字典 参数,前面有两个 *
  • argsarguments 的缩写,有变量的含义

  • kwkeyword 的缩写,kwargs 可以记忆 键值对参数

代码示例:

def demo(num, *nums, **person):

    print(num)
    print(nums)
    print(person)
    
demo(1)

结果:

1
()
{}

与上面所示代码进行对比:

def demo(num, *nums, **person):

    print(num)
    print(nums)
    print(person)

demo(1, 2, 3, 4, 5, name="小明", age=18, weight=178)

结果:

1
(2, 3, 4, 5)
{'name': '小明', 'age': 18, 'weight': 178}

多值参数案例 —— 计算任意多个数字的和

def sum_numbers(*args):

    num = 0

    print(args)
    # 循环遍历
    for n in args:
        num += n

    return num

result = sum_numbers(1, 2, 3, 4, 5)
print(result)

结果:

(1, 2, 3, 4, 5)
15

2、元组和字典的拆包

  • 在调用带有多值参数的函数时,如果希望:
    • 将一个 元组变量,直接传递给 args
    • 将一个 字典变量,直接传递给 kwargs
  • 就可以使用 拆包,简化参数的传递,拆包 的方式是:
    • 元组变量前,增加 一个 *
    • 字典变量前,增加 两个 *

代码示例:

def demo(*args, **kwargs):

    print(args)
    print(kwargs)

# 元组变量/字典变量
gl_nums = (1, 2, 3)
gl_dict = {"name": "小明", "age": 18}

demo(gl_nums, gl_dict)

结果:

((1, 2, 3), {'name': '小明', 'age': 18})
{}

与上面的代码进行对比:

def demo(*args, **kwargs):

    print(args)
    print(kwargs)

# 元组变量/字典变量
gl_nums = (1, 2, 3)
gl_dict = {"name": "小明", "age": 18}

# 拆包语法,简化元组变量/字典变量的传递
demo(*gl_nums, **gl_dict)

print("*"*30)

# 不使用拆包方法时,想得到结果的操作,相对来说比较复杂。
demo(1, 2, 3, name="小明", age=18)

结果:

(1, 2, 3)
{'name': '小明', 'age': 18}
******************************
(1, 2, 3)
{'name': '小明', 'age': 18}

猜你喜欢

转载自blog.csdn.net/qq_41780295/article/details/89112376