加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 11:07:37 所属栏目:Python 来源:网络整理
导读:我想为 python(3.x)中的函数返回一个或两个变量.理想情况下,这取决于用户在函数调用时请求的返回变量的数量.例如,max()函数默认返回最大值,并且可以返回argmax.在python中,这看起来像: maximum = max(array)maximum,index = max(array) 我目前用额外的参数r
我想为 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,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)

都会按预期工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读