【问题标题】:Returning different number and types of values?返回不同数量和类型的值?
【发布时间】:2020-06-13 03:23:34
【问题描述】:

通常我需要让函数 OR 方法返回不同数量或类型的值。 例如:

def test(x,y,ret='both') :
  s = x + y
  m = x * y
  if ret = 'both' : return s, m
  if ret = 'sum' : return s
  if ret = 'mult' : return m

有时我希望在注入调试代码时具有 Aspect 类型行为,这也可能会更改返回类型/num-of-vals

是否有处理此问题的标准编程模式?装饰师?

示例工作但有点笨重..


这只是一个例子......为了说明,不要把它当作规范的方法

【问题讨论】:

  • a staticmethod 可能是解决此问题的最佳方法,请参阅 link
  • 因此,Python 函数只能返回一个值。在您的情况下,该值可能是一个 container,例如 tuple。但它只是一个单一的值。一般来说,我会说具有多种不同返回类型的函数是一种反模式,并且没有标准的方法来处理它。
  • @FishingCode 这有什么关系?这是一个函数,而不是一个方法。
  • 如果 OP 要注入代码,为什么 tuple 会有用? tuple 是不可变的...
  • @sten 你找到其他方法了吗?

标签: python design-patterns return


【解决方案1】:

据我所知,任何原子动作都由不同的函数执行是很方便的。 无论如何,如果您仍然想在同一个函数中执行多个计算并且您不介意性能,您总是可以返回 sum 和 mult(以及任何其他变量),并将选择所需内容的任务留给调用者.就个人而言,我发现字典是一个不错的方法:

def test(x, y) :
    values = {}
    values['sum'] = x + y
    values['mult'] = x * y
    return values

【讨论】:

  • 'both' 的条件是什么,即返回 sum 和 mult
  • 他们已经在字典中了。您可以从调用方访问 values['sum'] 和 values['mult']
  • 啊好吧,从这个意义上说是因为它会是 {'sum': ..., 'mult':...}。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-28
  • 1970-01-01
  • 2019-12-18
  • 2016-06-09
  • 1970-01-01
  • 2020-08-31
  • 1970-01-01
相关资源
最近更新 更多