*args 与 **kwargs

2024-06-04 10:12
文章标签 args kwargs

本文主要是介绍*args 与 **kwargs,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

*args 与 **kwargs

    • *args
    • **kwargs

*args

在 Python 中,*args 是一个特殊的语法,用于表示函数定义或调用时的可变参数列表(variable argument list)。这里的星号(*)表示 “任意数量”,而 args 是 “arguments”(参数)的缩写。在函数调用时,可以通过 * 操作符将序列(列表、元组、字符串等)中的元素解包为位置参数。

作用:

  1. 接收任意数量的位置参数: 在函数定义中使用 *args 可以捕获传递给函数的额外位置参数,这些参数被存储在一个元组(tuple)中
  2. 提高函数的灵活性: 允许函数接受不确定数量的参数,使得函数可以更灵活地被重用
def my_func(*args):  # 接收任意数量的位置参数,这些位置参数都会被存入 args 元组print(args)for arg in args:print(arg)my_func(1, 2, 3, 4)  # 将任意数量的位置参数存入 args 元组
---------
(1, 2, 3, 4)
1
2
3
4my_func([1, 3, 5])  # [1, 3, 5] 是一个位置参数,被存入 args 元组
---------
([1, 3, 5],)
[1, 3, 5]my_func(*[1, 3, 5])  # * 表示解包,即将序列(列表、元组、字符串等)中的元素解包为位置参数,这些位置参数会被存入 args 元组;等价于 my_func(1, 3, 5)
---------
(1, 3, 5)
1
3
5

**kwargs

在 Python 中,**kwargs 是一个常用的语法,用于表示函数调用时的关键字参数(keyword arguments)。其中,** 表示解包(unpacking),kwargs 是一个缩写,代表 “keyword arguments”。

当在函数定义中看到 **kwargs 时,它表示函数可以接受任意数量的关键字参数,并将它们作为字典接收。这使得函数可以非常灵活地接受不同的参数。

在函数调用中使用 **kwargs 时,它允许你传递任意数量的命名参数,这些参数在函数内部可以作为一个字典来访问。

def my_func(**kwargs):  # 接收任意数量的关键字参数,这些关键字参数都会被存入 kwargs 字典print(kwargs)for arg in kwargs:print(arg)my_func(name='sijiali', age=17, hobby='sleep')  # 将任意数量的关键字参数存入 kwargs 字典
---------
{'name': 'sijiali', 'age': 17, 'hobby': 'sleep'}
name
age
hobbypeople_dict = {'name': 'sijiali', 'age': 17, 'hobby': 'sleep'}
my_func(kwargs=people_dict)  # 这里是一个关键字参数
---------
{'kwargs': {'name': 'sijiali', 'age': 17, 'hobby': 'sleep'}}
kwargspeople_dict = {'name': 'sijiali', 'age': 17, 'hobby': 'sleep'}
my_func(**people_dict)  # ** 表示解包,即将字典中的键值对解包为关键字参数,这些关键字参数会被存入 kwargs 字典;等价于 my_func(name='sijiali', age=17, hobby='sleep')
---------
{'name': 'sijiali', 'age': 17, 'hobby': 'sleep'}
name
age
hobby

这篇关于*args 与 **kwargs的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1029791

相关文章

yolov8代码记录---(tasks.py中的c1、c2和args) / (断点续训)

一、task中的c1、c2和args参数解析 如果你想在yolov8中修改或添加 新的结构块,基本都会修改到task.py中的c1、c2和args参数。 此处以Conv所在的判断分支代码为例: if m in (Classify, Conv, ConvTranspose, ..., C3x, RepC3):c1, c2 = ch[f], args[0]if c2 != nc:c2 = make_

template<typename ... _Args>可变参数模板

template<typename ... _Args> 是一种用于定义可变参数模板(variadic template)的语法。这种模板允许你在编译时处理数量可变的参数列表。这种特性非常有用,尤其是在需要处理不确定数量的参数时。 #include <iostream>// 可变参数模板函数template<typename... Args>void print(Args... args

函数的参数*args和**kwargs

1 问题 本文将分析函数的参数*args和**kwargs。 2 方法 不定长元祖参数*args;不定长元祖参数,就是不确定数量的参数,定义一个参数把传入的参数组合成元祖,来接受函数调用时传递过来的N个参数,在函数体内以元祖形式按顺序读取。代码清单 1 def hanshu(a,*args):    print("formal arg:",a)    for arg in args:

【c语法】##__VA_ARGS__与__VA_ARGS__

欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 文章目录 引言__VA_ARGS__ 引言 在调试过程中,我们经常会自定义打印,比如日志信息的输出,这时就会用VA_ARGS,接下来详细讲解! VA_ARGS __VA_ARGS__是C语言设定的一个预定义宏,用于处理可变参数的参数列表。通常用在宏定义中,以便宏可以接收不定数量的参数,并将他们

vscode 调试python代码时添加参数(args)

https://blog.csdn.net/zk0272/article/details/83105574

C++11参数包...Args

以list中的包装器做介绍 包装器是由一个类模板接收后存储在统一的...Args中 标准格式 说明:...Args就是参数包的类型 实例:  //参数包void Show(){cout <<"结束" << endl;}template<class T,class ...Args>void Show(T& val ,Args... args2){cout <<

*args和**kwargs这个在python中的意思

1、**kwargs 在Python中,是一个用于解包字典的操作符。当在函数调用时使用时,它会将字典中的键值对解包为关键字参数传递给函数。这样可以方便地将字典中的数据作为关键字参数传递给函数。 例如,如果有一个字典data = {'a': 1, 'b': 2},可以使用**data将字典解包为关键字参数传递给函数: def my_function(a, b):print(a, b)data

java中为什么main方法是public static void main(String [] args)

问题 为什么java的main方法是 public static void main(String [] args),为什么要用public 、static、void 修饰 当然也可以这样写 public static void main(String... args)  问题解答 main 方法是Java程序的入口,在java运行时,jvm会寻找类中的public static

【python】IndexError: Replacement index 1 out of range for positional args tuple

成功解决“IndexError: Replacement index 1 out of range for positional args tuple”错误的全面指南 一、引言 在Python编程中,IndexError: Replacement index 1 out of range for positional args tuple这个错误通常发生在使用str.format()方法或

Google Cloudbuild yaml file 中 entrypoint 和 args 的写法

编写cloudbuild.yaml 时有几个关键参数 entrypoint 和 args 的基本介绍 id: 显示在 cloud build logs 里的item 名字 name: docker 镜像名字 - 下面的命令会在这个镜像的1个容器instance 内执行 entrypoint: 执行的命令入口 , 只能有1个对象 args: 命名的参数, 它是1个list 问题来了, 如何理解