【Python—参数】*arg与**kwargs参数的用法
在python中,这两个是python中的可变参数,*arg表示任意多个无名参数,类型为tuple;**kwargs表示关键字参数,为dict。
# *允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。
def f(a,*args):
print(args) f(1,2,3,4) def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
print(sum) calc(1,2,3,4) # **,关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
def d(**kargs):
print(kargs) d(a=1,b=2) #在函数混合使用*以及**。
def h(a,*args,**kargs):
print(a,args,kargs) h(1,2,3,x=4,y=5) def person(name,age,**kw):
print('name:',name,'age:',age,'other:',kw) person('Adam', 45, gender='M', job='Engineer')
输出:
(2, 3, 4)
30
{'a': 1, 'b': 2}
1 (2, 3) {'x': 4, 'y': 5}
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
知识点:
在python中,当*和**符号出现在函数定义的参数中时,表示任意数目参数收集。*arg表示任意多个无名参数,类型为tuple;**kwargs表示关键字参数,为dict,使用时需将*arg放在**kwargs之前,否则会有“SyntaxError: non-keyword arg after keyword arg”的语法错误
上面是在函数定义的时候写的*和**形式,那反过来,如果*和**语法出现在函数调用中又会如何呢?
他会解包参数的集合。例如,我们在调用函数时能够使用*语法,在这种情况下,它与函数定义的意思相反,他会解包参数的集合,而不是创建参数的集合。
#通过一个元组给一个函数传递四个参数,并且让python将它们解包成不同的参数。
def func(a,b,c,d):
print(a,b,c,d) a = (1,2,3,4)
func(*a) # 如果已经有一个元祖,在参数前加*,函数会把元祖中的元素一个一个传到函数里面
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
print(sum) num = (1,2,3,4)
calc(*num) #如果已经有一个dict,在参数前面加**,函数会把dict中所有键值对转换为关键字参数传进去 def person(name,age,**kw):
print('name:',name,'age:',age,'other:',kw) extra = {'city': 'Beijing', 'job': 'Engineer'}
person('Jack', 24, **extra)
输出:
1 2 3 4
30
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
知识点:
在函数调用时,*会以单个元素的形式解包一个元祖,使其成为独立的参数。
在函数调用时,**会以键/值对的形式解包一个字典,使其成为独立的关键字参数。
【Python—参数】*arg与**kwargs参数的用法的更多相关文章
- Python里*arg 和**kwargs的作用
Hi,伙计们.我发现Python新手们在理解*args和**kwargs这两个魔法变量时都有些困难.他们到底是什么?首先,我先告诉大家一个事实,完整地写*args和**kwargs是不必要的,我们可以 ...
- python之*args和**kwargs参数,以及迭代器
*args让函数可以接受不限制多个位置参数,**kwargs让函数可以接受不限制多个关键字参数,用法如图 2.迭代器总结
- python的init函数里参数的作用
问题发现 一直有一个疑问,有时我们在继承时,在__init__函数会出现可变参数*arg或关键字参数**kw这样的参数,这些参数有什么用?如果有用,这些参数时如何传递?传递些什么? 注:如果你不知道什 ...
- Python函数可变参数*args及**kwargs详解
初学Python的同学们看到代码中类似func(*args, **kwargs)这样的函数参数定义时,经常感到一头雾水. 下面通过一个简单的例子来详细解释下Python函数可变参数*args及**kw ...
- python的函数介绍 位置参数 关键字参数 默认参数 参数组 *args **kwargs
1.数学意义的函数与python中的函数 数学意义的函数 y = 2*3+1 x =3 y =7 x是自变量,y是因变量 2.python中定义函数的方法 一个函数往往都是为了完成一个特定的功能而存在 ...
- Python可变参数*args和**kwargs
本文我们将通过示例了解 Python函数的可变参数*args和 **kwargs的用法. 知识预备:Python 函数和 Python 函数参数 在Python编程中,我们定义一个函数来生成执行类似操 ...
- python基础学习Day10 函数形参的动态参数、*args **kwargs 命名空间 global 与 nonlocal
一.函数形参的动态参数 原因:为了拓展,对于实参数量不固定,故需要万能参数,即动态参数, *args **kwargs # def sum1(*args): # 在函数定义时,在*位置参数,聚合. ...
- (十五)python3 可变长参数(arg,*args,**kwargs)
可变长参数(*args,**kwargs) 一.最常见的是在定义函数时,预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字.其实并不是必须写成*args 和**kwar ...
- python(39):argparse的用法,从外部传入指定参数
直接上例子: # /usr/bin/env python # coding=utf8 import os import argparse import logging import sys FORMA ...
随机推荐
- 记录几个ui框架
Web前端领域最近几年发展的特别迅速,可以说是百家争鸣.Web前端框架就是为了节约开发成本和时间,一般开发一个项目都会用到前端框架(除非自己有前端开发团队).对于现在的开发者来说,都向着全栈方向发展, ...
- swift实现线程安全的栈和队列
实现一个线程安全的栈 这里使用数组来存储栈的数据.不足之处在于本例中的Stack可以无限扩容,更好的是初始化时候指定一个最大容量,防止不断扩容申请内存导致内存不够的问题.这里的线程安全使用一个串行队列 ...
- $2019$各种$WC$没去记
\(2019\)各种\(WC\)没去记 太弱了去不了啊. 至少我联赛没退役是吧...(退役感++ 不过这个分数线还是有点让人自闭啊,划线人绝对有毒,有人关照一下空巢老人\(mona\)喵? 这里大概是 ...
- LCT的一些坑【已经变成坑点集合了233】
好了蠢蠢的我写了第一个LCT模板就炸掉了QAQ 开个blog记一下我能出多少锅. 1.splay写挂了hhh这个你真的是蠢 2.这个奇怪的东西 bool not_root(int x){return ...
- 破坏双亲委托机制的一些情况---Tomcat和JDBC,破坏后的安全问题
采用双亲委托机制的原因 类加载器就是将字节码搬进jvm方法区的组件.我们知道,JVM识别加载进来的类是通过类加载器+类全名完成的,也就是说同一个类由不同类加载器加载进去的话就会被视为不同的类.jdk提 ...
- 运行 tensorboard
使用下面命令总是报错: tensorboard --logdir=mylogdir tensorboard --logdir='./mylogdir' 正确命令 tensorboard --logdi ...
- Cobaltstrike系列教程(一)-简介与安装
0x001-Cobaltstrike简介 Cobalt Strike是一款美国Red Team开发的渗透测试神器,常被业界人称为CS.这款神器许多大佬们都已经玩的很6,我一个菜鸡玩的略有心得,因此写一 ...
- action function
Action委托具有Action<T>.Action<T1,T2>.Action<T1,T2,T3>……Action<T1,……T16>多达16个的重载 ...
- php单点登录实现原理实例详解
单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任. 单点登录在大型网站里使用 ...
- python比C程序相比非常慢
w http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001374738136930 ...