Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python参数详解:什么是*args和**kwargs?

Python参数详解:什么是*args和**kwargs?

作者头像
HuangWeiAI
发布于 2020-02-24 04:49:26
发布于 2020-02-24 04:49:26
56700
代码可运行
举报
文章被收录于专栏:浊酒清味浊酒清味
运行总次数:0
代码可运行

前言

我们可能会遇到这样的Python函数定义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def a_function(*args, **kwargs):
    ...

一颗星号(*)已经两颗星号(**)都表示能够接收可变长度的参数。但是如何区别和理解这里的一颗星和两颗星呢?我们接下来通过例子详细介绍二者的联系和区别。

需要注意的是args和kwargs名称并不重要——它们仅仅是约定,分别代表“参数”和“关键字参数”。可以使用任何其他适当的参数名。

一颗星*

假设我们需要一个功能来让用户分享他们的爱好,但是我们不知道一个用户会有多少爱好:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def my_hobbies(*hobbies):
    print("My hobbies: " + ", ".join(hobbies))

我们的函数现在接受一个或多个参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> my_hobbies('reading', 'writing')
My hobbies: reading, writing

>>> my_hobbies('reading', 'writing', 'hiking', 'learning Python')
My hobbies: reading, writing, hiking, learning Python

另外,我们也可以调用我们的函数通过传递它一个元组,使用类似的星号语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> some_hobbies = ('reading', 'writing', 'hiking', 'learning Python')
>>> my_hobbies(*some_hobbies)
My hobbies: reading, writing, hiking, learning Python

两颗星**

现在假设我们想要一个功能,让用户可以在不同的类别中分享他们喜欢的东西,但是我们不知道一个用户会选择多少个类别:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def my_faves(**favorites):
    print("My favorite things...")
    for category, fave in favorites.items():
        print(f"{category}: {fave}")

我们的函数现在接受一个或多个关键字参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> my_faves(Color='green', Fruit='persimmon')
My favorite things...
Color: green
Fruit: persimmon

>>> my_faves(Season='winter', Language='Python', Website='dev.to')
My favorite things...
Season: fall
Language: Python
Website: dev.to

我们也可以调用我们的函数通过传递字典,使用类似的双星号语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> some_faves = {"Animal": "whale", "Summer Hobby": "hiking"}
>>> my_faves(**some_faves)
My favorite things...
Animal: whale
Summer Hobby: hiking

当然,函数可以由形式参数、可变长度参数和可变长度关键字参数混合定义。这样做时,它们必须按照以下顺序出现在定义中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def a_function(arg, *args, **kwargs):
    ...

·END·

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python与机器学习之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python 函数总结
关键字参数只能用于“函数调用”,默认参数用于“函数声明”;对于默认函数,所有必须提供的参数一定要出现在任何可选参数之前,不能混在一起活着颠倒顺序。
py3study
2020/01/14
3210
理解 Python 编程中 *args 与 **kwargs 的妙用
在 Python 编程中,*args 和 **kwargs 是两种用于函数定义时处理可变数量的参数的机制。它们分别用于处理位置参数(*args)和关键字参数(**kwargs)。这两个机制提高了函数的灵活性和可重用性,允许开发者编写更加通用和灵活的代码。
叶庭云
2024/05/25
3.4K0
[949]python不定长参数*args和**kwargs
在python语言写成的模块中的函数里,常常可以看到函数的参数表列里面有这两个参数,形如:
周小董
2021/03/08
3.7K1
Python十大装B语法「建议收藏」
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
全栈程序员站长
2022/09/05
4670
Python小技巧:​args 和 kwargs 的乐趣
这篇文章是伟兄给我的稿子,总结实用、到位。另外,欢迎访问并关注他的博客: https://jl-zhenlaixiaowei.blog.csdn.net/ 我曾经和一个聪明的 Pythonista 结对编程,每次他输入带有可选或关键字参数的函数定义时,他都会惊呼“argh!”和“kwargh!”。 要不然我们相处的很好,我猜想这就是学术界编程最终对人所带来的影响吧。 现在args和 kwargs参数仍然是 Python 中非常有用的特性,而且理解它们的威力将使您成为更有效的开发人员。 那么“args”和“
double
2022/05/20
6240
python之魔法变量*args 和 **kwargs
*args 和**kwargs只是一个通俗的命名约定,只有变量前面的 *(星号)才是必须的,也可写成*var 和**vars。
菲宇
2019/09/06
9150
Python中 *args 和 **kwargs的用法
总是会在一些代码中看到*args和**kwargs,一直不知道具体怎么用,今天整理了一下:
BigYoung小站
2020/07/02
6290
27. Python函数参数详解
在Python编程中,函数参数是一个非常重要的概念。掌握不同类型的参数及其使用方法,可以让你的代码更加灵活和强大。本教程将详细介绍Python中的三种主要参数类型:位置参数、关键字参数和默认参数。
全栈若城
2025/04/30
1510
27. Python函数参数详解
Python 拓展之 *args & **kwargs
我们在前几天的文章中写的函数,它们的参数的个数都是确定的,我们知道世界是不确定的,那么函数的参数当然也有不固定的时候,那么当我们碰到这个问题的时候,该怎么解决呢?请看接下来的文章。
编程文青李狗蛋
2019/11/07
5450
Python 可变参数 *args **kwargs 的再了解
可以从上面的结果来看,args可以把多余的数字放入一个元组中,而后面的则被kwargs放入字典中。
Devops海洋的渔夫
2019/06/02
5450
python--一文搞懂参数args,kwargs
函数传参是最常用的方法,但是你真的掌握python里参数的传递和使用了吗?之前文章我们介绍了传参的拷贝情况,会不会引起传入参数的变化。本文详细介绍python的函数中*args, **kwargs的使用。
languageX
2023/04/03
7.8K2
你所不知道的Python | 函数参数的演进之路
函数参数处理机制是Python中一个非常重要的知识点,随着Python的演进,参数处理机制的灵活性和丰富性也在不断增加,使得我们不仅可以写出简化的代码,也能处理复杂的调用。
simpleapples
2018/10/18
4840
Python十大装腔语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
AI科技大本营
2019/11/12
5880
谈一谈python中的魔法变量*args和**kwargs
,没有注释,没有封装,没有可读性。哎,幸亏发现及时,现在正在写一个新的任务,刚好可以好好弄弄架构和代码了!
zenRRan
2018/10/24
5040
Python 十大奇葩语法
本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会使代码看上去更老练,读起来更优雅。
IT阅读排行榜
2019/11/12
6210
Python 十大奇葩语法
高效Python编程之方法参数
可变数量参数是指参数前带 * 的。如 *args. 比如,你想要通过一些参数信息来打印日志。使用固定参数如下:
tunsuy
2022/10/27
5200
探索Python的魔法:揭秘__init__与__call__的神秘面纱
在Python的浩瀚宇宙中,__init__和__call__犹如两颗璀璨的星辰,引领着我们深入理解Python类与对象的奥秘。你是否好奇,为何这些方法如此独特?它们又是如何被调用的,背后隐藏着怎样的魔力?让我们一起揭开它们的神秘面纱!
zhangjiqun
2024/09/28
2910
如何运用Python中函数的魔法参数,*args 和 **kwargs 真的很重要!!!
在Python中,*args 和 **kwargs 是用于函数定义中的特殊语法,它们允许函数接收可变数量的参数。*args 用于接收任意数量的位置参数(非关键字参数),而 **kwargs 用于接收任意数量的关键字参数。
小白的大数据之旅
2024/11/25
5110
如何运用Python中函数的魔法参数,*args 和 **kwargs 真的很重要!!!
Python 函数详解
函数 函数是代码的一种组织形式 函数应该能完成一项特定的工作,而且一般一个函数只完成一项工作 有些语言,分函数和过程两个概念,通俗解释是,有返回结果的是函数,无返回结果的叫过程,python不加以区分 函数的使用 函数使用需要先定义 使用函数,俗称调用 # 定义一个函数 # 只是定义的话不会执行 # 1. def关键字,后跟一个空格 # 2. 函数名,自己定义,起名需要遵循便令命名规则,约定俗成,大驼峰命名只给类用 # 3. 后面括号和冒号不能省,括号内可以有参数 # 4. 函数内所有代码缩进 def
ruochen
2021/02/20
1K0
Python 函数详解
Python万能参数(*args, **kwargs)
Python内置一颗这样的语法糖,它允许函数声明时以(*args, **kwargs)声明它的参数,而(*args, **kwargs)可以接受任何类型的参数。
Steve Wang
2021/12/06
6810
相关推荐
Python 函数总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验