【问题标题】:Combine single and multi argument variables in a function call for Python在 Python 的函数调用中组合单参数和多参数变量
【发布时间】:2015-03-28 09:50:48
【问题描述】:

我编写了以下函数来返回字典的子集,但我希望坚持在输入参数中至少提供一个键。

def getProperty(self,x, *key):
    key = [k for k in key]
    key.insert(0,x)
    return {k:self.__properties[k] for k in key if k in self.__properties}

代码有效。

我知道插入并不是真正必要的,因为字典元素没有排序。我真正希望我能做的是摆脱第一个通过从多参数元组中提取元素来创建列表的 for 循环。

类似

key = [x] + [key]

但它不起作用。

【问题讨论】:

  • it does not work 是什么意思?
  • since dictionary elements aren't ordered - 字典在哪里?
  • key已经是一个list/tuple,可以直接在dict里面加x
  • 字典是__properties。我只是想检索给定输入键的子集,其中至少一个是强制性的。

标签: python python-3.4 argument-passing


【解决方案1】:

这应该可以满足您的需要:

def getProperty(self,x, *key):
    key = (x,)+key
    return {k:self.__properties[k] for k in key if k in self.__properties}

【讨论】:

  • 谢谢蒂姆,这正是我所希望的 :)
【解决方案2】:

如果你想坚持至少有一个论点,那么你应该assert args 元组不为空

>>> def get_property(*args):
...     assert (args != ()), "There must be at least one argument"
...     print(args)
...
>>> get_property('a')
('a',)
>>> get_property('a', 'b')
('a', 'b')
>>> get_property()
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "<stdin>", line 2, in get_property
AssertionError: There must be at least one argument
>>>

因此,当您调用该方法时,无需做任何花哨的事情来提供一个单独的参数,如果需要,您可以在调用语句中捕获 AssertionError

【讨论】:

  • 谢谢 Ben,我一直在寻找更多的代码优化解决方案,但也没有想到这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 2021-02-21
相关资源
最近更新 更多