IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python3中参数*args和**kwargs介绍 -> 正文阅读

[Python知识库]Python3中参数*args和**kwargs介绍

? ? ? 在Python中,我们可以使用两种特殊符号将可变数量的参数传递给函数:*args和**kwargs。你可以使用任何单词代替args和kwargs,但通常做法是使用args和kwargs。

? ? ? *args允许函数接受任意数量的位置参数(positional arguments)

? ? ? **kwargs收集所有未明确定义的关键字参数。因此,它执行与*args相同的操作,但针对关键字参数。**kwargs允许函数接受任意数量的关键字参数。默认情况下,**kwargs是一个空字典。每个未定义的关键字参数都作为键值对存储在**kwargs字典中

? ? ? Python不允许位置参数跟在关键字参数之后

? ? ? 位置参数(positional arguments)和关键字参数(key word arguments)区别:位置参数仅由名称声明;关键字参数由名称和默认值声明。调用函数时,必须给出位置参数的值,否则会得到一个error。如果我们没有为关键字参数指定值,它将采用默认值。

? ? ? 我们可以在函数中同时使用*args和**kwargs,但*args必须放在**kwargs之前。

? ? ? 我们可以使用*args和**kwargs打包和解包(pack and unpack)变量。

? ? ? 以上内容和以下测试代码主要参考:https://towardsdatascience.com/10-examples-to-master-args-and-kwargs-in-python-6f1e8cc30749


# https://towardsdatascience.com/10-examples-to-master-args-and-kwargs-in-python-6f1e8cc30749
var = 8
if var == 1:
    # *args允许函数接受任意数量的位置参数
    def addition(*args):
        result = 0
        for i in args:
            result += i
        return result

    # 传递给此addition函数的参数存储在一个元组中,因此可以迭代args变量
    print("addition():", addition())
    print("addition(1, 4):", addition(1, 4))
    print("addition(1, 7, 3):", addition(1, 7, 3))
elif var == 2:
    def arg_printer(a, b, *args):
        print(f"a is {a}")
        print(f"b is {b}")
        print(f"args is {args}")

    # 前两个值被赋予a和b,其余值存储在args元组中
    arg_printer(3, 4, 5, 8, 3)

    # Python希望将关键字参数放在位置参数之后
    # 如果为位置参数赋值,它就成为关键字参数.由于它后面是位置参数,因此会得到一个SyntaxError
    #arg_printer(a=4, 2, 4, 5) # SyntaxError: positional argument follows keyword argument
elif var == 3:
    def addition(a, b, *args, option=True): # option是关键字参数
        result = 0
        if option:
            for i in args:
                result += i
            return a + b + result
        else:
            return result

    print(addition(1,4,5,6,7)) # 23
    print(addition(1,4,5,6,7, option=False)) # 0
elif var == 4:
    # **kwargs允许函数接受任意数量的关键字参数,它收集所有未明确定义的关键字参数,默认**kwargs是一个空字典,每个未定义的关键字参数都作为键值对存储在**kwargs字典中
    def arg_printer(a, b, option=True, **kwargs):
        print(a, b) # 3 4
        print(option) # True
        print(kwargs) # {'param1': 5, 'param2': 6}

    arg_printer(3, 4, param1=5, param2=6)
elif var == 5:
    # 我们可以在函数中同时使用*args和**kwargs,但*args必须放在**kwargs之前
    def arg_printer(a, b, *args, option=True, **kwargs):
        print(a, b) # 1 4
        print(args) # (6, 5)
        print(option) # True
        print(kwargs) # {'param1': 5, 'param2': 6}

    arg_printer(1, 4, 6, 5, param1=5, param2=6)
elif var == 6:
    # 我们可以使用*args打包和解包(pack and unpack)变量
    def arg_printer(*args):
        print(args)

    lst = [1,4,5]
    # 如果我们将一个列表传递给arg_printer,它将作为一个元素存储在args元组中
    arg_printer(lst) # ([1, 4, 5],)
    # 如果我们在lst之前放一个星号,列表中的值将被解包(unpack)并单独存储在args元组中
    arg_printer(*lst) # (1, 4, 5)
    tpl = ('a','b',4)
    # 我们可以传递多个可迭代对象与单个元素一起解包(unpack),所有值都将存储在args元组中
    arg_printer(*lst, *tpl, 5, 6) # (1, 4, 5, 'a', 'b', 4, 5, 6)
elif var == 7:
    # 我们也可以使用关键字参数(keyword argument)进行打包和解包(pack and unpack),
    # 但是作为关键字参数传递的迭代必须是一个映射,比如字典
    def arg_printer(**kwargs):
        print(kwargs)

    dct = {'param1':5, 'param2':8}
    arg_printer(**dct) # {'param1': 5, 'param2': 8}

    # 如果我们还将额外的关键字参数与字典一起传递,它们将组合并存储在kwargs字典中
    arg_printer(param3=9, **dct) # {'param3': 9, 'param1': 5, 'param2': 8}
elif var == 8:
    # reference: https://www.geeksforgeeks.org/args-kwargs-python/
    def myFun(arg1, arg2, arg3):
        print(f"arg1: {arg1}, arg2: {arg2}, arg3: {arg3}")

    args = ("Geeks", "for", "Geeks")
    myFun(*args) # arg1: Geeks, arg2: for, arg3: Geeks

    kwargs = {"arg1" : "Geeks", "arg2" : "for", "arg3" : "Geeks"}
    myFun(**kwargs) # arg1: Geeks, arg2: for, arg3: Geeks

print("test finish")

? ? ? GitHubhttps://github.com/fengbingchun/Python_Test

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-12-24 18:26:04  更:2021-12-24 18:27:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:28:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码