栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python 函数的参数传递*args和**kwargs

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python 函数的参数传递*args和**kwargs

Python中函数传递参数的形式主要有以下五种,分别为位置传递,关键字传递,默认值传递,不定参数传递(包裹传递)和解包裹传递。前三种都比较清楚,那么本文来讲一下包裹传递和解包裹传递。

  • args 是 arguments 的缩写,表示位置参数;
  • kwargs 是 keyword arguments 的缩写,表示关键字参数。

其实这只是编程人员约定的变量名字,你用其他的命名也没问题。这其实就是 Python 中可变参数的两种形式,并且 *args 必须放在 **kwargs 的前面,否则会有“SyntaxError: non-keyword arg after keyword arg”的语法错误。

知识点:

  1. 在函数调用时,*会以单个元素的形式解包一个元组,使其成为独立的参数。
  2. 在函数调用时,**会以键/值对的形式解包一个字典,使其成为独立的关键字参数。
先来看下*args的例子:
def f(a,*args):
    print(args)
f(1,2,3,4)

# 输出为:(2, 3, 4)
# 虽然传入1,2,3,4,但是解包为(1),(2,3,4),其中a是1,args是剩下的参数。
def f(a,b,*args):
    print(a)
    print(args)
f([1,2,3,4,5])
# 输出为:
# 1
# (3, 4, 5)   # 变成元组了

在python中,当*和**符号出现在函数定义的参数中时,表示任意数目参数。*arg表示任意多个无名参数,类型为tuple; **kwargs表示关键字参数,为dict.

再看下**kwargs传参的例子:
def f(**kwargs):
    print(kwargs) 
f(a=1,b=2) # 实际传入参数是两个,但是给包裹在一起

# 输出为:{'a': 1, 'b': 2}
def f(name,age,**kwargs):
    print('name:',name,'age:',age,'info:',kwargs)
f('Jerry', 18, gender='M', job='Engineer')

# 输出为:name: Jerry age: 18 info: {'gender': 'M', 'job': 'Engineer'}
# 传入4个参数,自动将后两位拼接成字典
再看*args和**kwargs混合使用的栗子:
def f(a,*args,**kwargs):
    print(a,args,kwargs)

f(1,2,3,x=4,y=5)
# 丢进去不确定参数的包裹:1,2,3,x=4,y=5
# 解包:1                    -a
# 解包:(2,3)			    -*args
# 解包:{'x': 4, 'y': 5}	    -**kwargs

# 输出为:1 (2, 3) {'x': 4, 'y': 5}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/935293.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号