【问题标题】:Add arguments using kwargs in Python在 Python 中使用 kwargs 添加参数
【发布时间】:2012-01-27 06:49:09
【问题描述】:

下面是我的功能

def list_abc(self, name, id, keywords):
        cmd = ABC() //ABC is a class
        cmd.id=id
        cmd.name=name
        cmd.keywords=keywords
        return ABC(cmd)

我希望在 Python 中使用 **kwargs 传递 nameid 和 'keywords

知道怎么做吗?

提前致谢。

【问题讨论】:

    标签: python-3.x python ipython


    【解决方案1】:
    kwargs = {'name': 'Frank', 'id': 999, 'keywords': ['cool', 'smart']}
    result = self.list_abc(**kwargs)
    

    【讨论】:

      【解决方案2】:
      def list_abc(self, **kwargs):
          # check if 'name' in kwargs, etc
          cmd = ABC()
          cmd.id = kwargs['id']
          cmd.name = kwargs['name']
          cmd.keywords = kwargs['keywords']
          return ABC(cmd) # not sure what ABC(ABC) does
      
      ...
      some_instance.list_abc(name='name', id=1, keywords=['good', 'luck'])
      
      
      # or, if have a dictionary containing name, id and keywords, you can pass it to the
      # method as follows
      data = {'name':'name', 'id':1, 'keywords':('a', 'b')}
      some_instance.list_abc(**data)
      

      【讨论】:

      • [setattr(cmd, k, v) for k, v in kwargs.items()]
      • @DrTyrsa,无需创建新列表。
      • @khachik 它没有分配给任何变量,所以它在下一行被销毁。这只是for 循环的一种简短形式。比手动分配属性更快,更不容易出错。
      • @DrTyrsa:我认为如果你调用一个函数是为了它的副作用,最好是显式地创建一个 for 循环。它读起来更干净,并且避免了为列表分配内存(即使你没有将它分配给任何东西,Python 仍然会创建列表然后将其丢弃)。
      • @ThomasK 如果你的类有许多“浪费内存”的属性,那么你肯定做错了。
      猜你喜欢
      • 2013-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 2012-12-29
      • 2023-04-06
      • 1970-01-01
      • 2010-09-12
      相关资源
      最近更新 更多