python *args 和**kwargs的用法
当函数的参数不确定时,可以使用*args 和**kwargs,*args 没有key值,**kwargs有key值。
关于args:
#!-*-coding:utf-8-*-
#__author__ = "ecaoyng"
def func_args(farg, *args):
print("The first arg is %s" % farg)
print(type(args))
for arg in args:
print("Other arg is %s" % arg)
func_args("hello","dear", "python")
输出:
The first arg is hello
<class "tuple">
Other arg is dear
Other arg is python
当然,也可以将
parameters = ["hello","dear", "python"]
func_args(*parameters)
结果也是一样的
kwargs的用法
#!-*-coding:utf-8-*-
#__author__ = "ecaoyng"
def fun_var_kwargs(farg, **kwargs):
print ("arg:", farg)
for key in kwargs:
print("another keyword arg: %s: %s" % (key, kwargs[key]))
# fun_var_kwargs(farg=1, myarg2="two", myarg3=3)
kargs={"a": 1, "b": 2, "c": 3, "d" : 4}
fun_var_kwargs(kargs)
print("="*40)
fun_var_kwargs("First",**kargs)
输出结果:
arg: {"a": 1, "d": 4, "b": 2, "c": 3}
========================================
arg: First
another keyword arg: a: 1
another keyword arg: d: 4
another keyword arg: b: 2
another keyword arg: c: 3
现在更进一步讨论Python的星号(、*)的作用
当函数的参数前面有一个星号的时候表示这是一个可变的位置参数,两个星号*表示是可变的关键字参数。
def foo(*args, **kwarg):
for item in args:
print("In args:")
print(item)
for k,v in kwarg.items():
print("In kwarg")
print (k,v)
print(30*"=")
foo(1, 2, 3, a=4, b=5)
# outputs:
# 1 in args.
# 2 in args.
# 3 in args.
# (a,4) in kwarg.
# (b,5) in kwarg.
foo(2, 3, a=4, b=5, c=1)
# outputs:
# 2 in args.
# 3 in args.
# (a,4) in kwarg.
# (b,5) in kwarg.
# (c,1) in kwarg.
#如上,我们可以传入任意多个参数
v = (1, 2, 4)
v2 = [11, 15, 23]
d = {"a": 1, "b": 12}
foo(v, d)
# In args:
# (1, 2, 4)
# In args:
# {"a": 1, "b": 12}
foo(*v, **d)
# In args:
# 1
# In args:
# 2
# In args:
# 4
# In kwarg
# b 12
# In kwarg
# a 1
foo(v2, d)
# In args:
# [11, 15, 23]
# In args:
# {"b": 12, "a": 1}
foo(*v2, **d)
# In args:
# 11
# In args:
# 15
# In args:
# 23
# In kwarg
# a 1
# In kwarg
# b 12
注意
上面的示例中如果v、v2、d没有加星号那么就当成了一个参数传递给了函数,如果加了星号那么就会解包后传递给函数。
可变位置参数*args是一个元组,是不可修改的。
对于字典类型的如果只使用一个型号*那么传入的只是字典的键。
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: 利用python做数据分析(五)-读取合并多个文件
- 下一篇:没有了