Python:是否可以根据请求返回可变数量的变量?

2024-04-25 07:32:23 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我正在用一个额外的参数来解决这个问题,返回参数:

^{pr2}$

这样,第一个代码块如下所示:

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

有没有办法避免额外的争论?也许测试用户期望的值有多少?我知道你可以返回一个元组并在调用它时解包它(我就是这么做的)。在

一个实际的函数,我正在做的是,这个行为是有意义的。在


Tags: 函数代码用户参数数量indexmy情况
3条回答

相反,您可以返回int(或float,具体取决于要处理的数据类型)的子类的实例,该子类具有附加的index属性,并且在序列上下文中使用时将返回两个项的迭代器:

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)

因此:

^{pr2}$

两者都能如期工作。在

不,这是不可能的。^在给maximum赋值之前,将调用并返回{}。如果函数返回多个值,则函数将尝试解包这些值并相应地分配它们。
大多数人通过这样做来解决这个问题:

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

或者

^{pr2}$

答案是no,在Python中,函数没有调用方的上下文,也不知道调用方期望返回多少值。在

相反,在Python中,您宁愿使用不同的函数,在函数签名中添加一个标志(就像您所做的那样),或者您将返回一个包含多个字段的对象,使用者可以根据需要获取这些字段。在

相关问题 更多 >