Python:是否可以按要求返回可变数量的变量?

我想为
python(3.x)中的函数返回一个或两个变量.理想情况下,这取决于用户在函数调用时请求的返回变量的数量.例如,max()函数默认返回最大值,并且可以返回argmax.在python中,这看起来像:

maximum = max(array)
maximum, index = max(array)

我目前用额外的参数return_arg解决这个问题:

import numpy as np

def my_max(array, return_arg=False):
   maximum = np.max(array)

   if return_arg:
      index = np.argmax(array)
      return maximum, index
   else:
      return maximum

这样,第一个代码块看起来像这样:

maximum = my_max(array)
maximum, index = my_max(array, return_arg=True)

有没有办法避免额外的争论?也许测试用户期望的多少个vaules?我知道你可以在调用时返回一个元组并解压缩(这就是我正在做的事情).

假设我正在执行的实际功能是这种行为有意义的功能.

最佳答案 您可以返回一个int子类(或float,具体取决于您要处理的数据类型)的实例,它具有一个额外的索引属性,并在序列上下文中使用时返回两个项的迭代器:

class int_with_index(int):
    def __new__(cls, value, index):
        return super(int_with_index, cls).__new__(cls, value)
    def __init__(self, value, index):
        super().__init__()
        self.index = index
    def __iter__(self):
        return iter((self, self.index))

def my_max(array, return_arg=False):
   maximum = np.max(array)
   index = np.argmax(array)
   return int_with_index(maximum, index)

以便:

maximum = my_max(array)
maximum, index = my_max(array)

都会按预期工作.

点赞