为了账号安全,请及时绑定邮箱和手机立即绑定

有关*args和**kwargs的资料信息和个人理解,多多讨论

以下是我找到的有关*args和**kwargs几个权威解释:
1、当函数的参数不确定时,可以使用*args和**kwargs。*args没有key值,**kwargs有key值
2、*args表示任何多个无名参数,它是一个list;**kwargs表示关键字参数,它是一个dict。并且同时使用*args和**kwargs时,必须*args参数列要在**kwargs前
参考链接:http://blog.csdn.net/chenjinyu_tang/article/details/8136841

那么*args和**kwargs之间就没有可替代性,代表的类型就不一样,目前涉及类的初始化定义中用到的**kwargs的有“4-4 初始化实例属性”和“5-6 获取对象信息”的编程任务题,各位可以找到相应课程查看

另外,说明一点*args和**kwargs的名称不是固定不变,实际格式的重点是前面的*,格式要求是*XXX和**XXX,只是因为习惯用法约定俗成的,如同实例方法用self和类方法用cls一样,测试下面两端代码你就能有一定理解了,对比代码如下:
【代码一】定义关键字参数为**kw

class Person(object):
    def __init__(self, name, gender, **kw):
        self.name = name
        self.gender = gender
        for k, v in kw.iteritems():
            setattr(self, k, v)

p = Person('Bob', 'Male', age=18, course='Python')
print p.age
print p.course

【代码二】定义关键字参数为**test

class Person(object):
    def __init__(self, name, gender, **test):
        self.name = name
        self.gender = gender
        for k, v in test.iteritems():
            setattr(self, k, v)

p = Person('Bob', 'Male', age=18, course='Python')
print p.age
print p.course

【运行结果】

18
Python

【总结】

*args表示任何多个无名参数(相当于list)

**kwargs表示关键字参数(相当于dict)

正在回答

4 回答

作为一个菜鸟,我知道了**kw与**kwargs是相等的。。。。。=_=

1 回复 有任何疑惑可以回复我~

赞赞赞

0 回复 有任何疑惑可以回复我~

1. *args表示任何多个无名参数,它是一个tuple;**kwargs表示关键字参数,它是一个dict。并且同时使用*args和**kwargs时,必须*args参数列要在**kwargs前

参考如下代码:

class Person(object):

    def __init__(*args, **kw):

        print isinstance(args, tuple)

        args[0].name = args[1]

        args[0].gender = args[2]

        for k, v in kw.iteritems():

            setattr(args[0], k, v)


p = Person('Bob', 'Male', age=18, course='Python')

print p.age

print p.course


0 回复 有任何疑惑可以回复我~

*args 实际上处理为tuple

参考如下代码:

class Person(object):

    def __init__(*args, **kw):

        print isinstance(args, tuple)

        args[0].name = args[1]

        args[0].gender = args[2]

        for k, v in kw.iteritems():

            setattr(args[0], k, v)


p = Person('Bob', 'Male', age=18, course='Python')

print p.age

print p.course


1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

有关*args和**kwargs的资料信息和个人理解,多多讨论

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信