我想为
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)
都会按预期工作.