Python-成员函数的argmin/argmax

Python-成员函数的argmin/argmax,python,argmax,Python,Argmax,我想知道是否有一种“pythonic”方法可以将数学argmin/argmax用于成员函数,而不使用类似numpy的库 我有一个类,里面有一个返回整数的成员函数。 我实例化了这个类的几个对象。 我想知道对于这个方法,哪个对象的返回值较低 请在下面找到我的源代码。 我想改进的部分就在我想改进的标记代码之后。这段代码运行得很好,但我很确定有更好的方法来做同样的事情 #/usr/bin/env python #-*-编码:utf-8-*- “”“argmin示例”“” 类人(对象): “人民阶级” 退

我想知道是否有一种“pythonic”方法可以将数学argmin/argmax用于成员函数,而不使用类似numpy的库

我有一个类,里面有一个返回整数的成员函数。 我实例化了这个类的几个对象。 我想知道对于这个方法,哪个对象的返回值较低

请在下面找到我的源代码。 我想改进的部分就在我想改进的标记代码之后。这段代码运行得很好,但我很确定有更好的方法来做同样的事情

#/usr/bin/env python
#-*-编码:utf-8-*-
“”“argmin示例”“”
类人(对象):
“人民阶级”
退休年龄={“一半”:60,“几乎满”:65,“满”:71}
定义初始(自我、姓名、年龄、更新模式):
超级(人,自我)。\uuuu init\uuuuuu()
如果ret_模式不在self.ret_ages.keys()中:
raise KeyError(返回模式+“不在”+str(self.ret\u ages.keys()))
self.name=名称
self.age=年龄
self.ret_mode=ret_mode
def获取剩余年数(自我):
"""
返回人们在挣钱之前还要工作多少年
退休。
可以是“一半”、“中间”或“全部”。
"""
尝试:
返回self.ret_ages[self.ret_mode]-self.age
除KeyError外:
raise KeyError(“速率必须在”+str(self.ret_ages.keys())中)
def main():
“主要功能”
人员列表=[
人物(“朱丽叶”,35岁,“完整”),
人(“Coralie”,26岁,“一半”),
人物(“劳拉”,27岁,“几乎满”)
]
#调试打印
对于人员列表中的人员:
打印people.name,“还有工作”\
人。获取剩余年数(),“年数。”
打印
#调试结束打印
############################
#我想改进的代码#
############################
people\u closer\u to\u ret=人员列表[0]
最小剩余年数=离退休更近的人。获得剩余年数()
对于人员列表中的人员:
如果有人。获得剩余年数()<最小剩余年数:
人与人之间的距离=人与人之间的距离
最小剩余年数=人。获取剩余年数()
最小剩余年数=人。获取剩余年数()
###################################
#我想改进的代码结束了#
###################################
打印“即将退休”的人的姓名
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
以下是此脚本的输出:

Juliette has still to work 36 years.
Coralie has still to work 34 years.
Laura has still to work 38 years.

Coralie will be retired soon !

以一种更具python风格的方式编写此代码的一个好方法是使用min函数,由于其参数key,它实际上可以像argmin函数一样使用

如果我们将代码替换为我想要改进的标记代码和我想要改进的代码末尾之间的代码:

people\u closer\u to\u ret=min(人员列表,
key=lambda people:people.get_剩余_年()),
它工作得很好。关键参数有助于告诉min函数它必须最小化的标准

因此,您的完整代码如下所示:

#/usr/bin/env python
#-*-编码:utf-8-*-
“”“argmin示例”“”
类人(对象):
“人民阶级”
退休年龄={“一半”:60,“几乎满”:65,“满”:71}
定义初始(自我、姓名、年龄、更新模式):
超级(人,自我)。\uuuu init\uuuuuu()
如果ret_模式不在self.ret_ages.keys()中:
raise KeyError(返回模式+“不在”+str(self.ret\u ages.keys()))
self.name=名称
self.age=年龄
self.ret_mode=ret_mode
def获取剩余年数(自我):
"""
返回人们在挣钱之前还要工作多少年
退休。
可以是“一半”、“中间”或“全部”。
"""
尝试:
返回self.ret_ages[self.ret_mode]-self.age
除KeyError外:
raise KeyError(“速率必须在”+str(self.ret_ages.keys())中)
def main():
“主要功能”
人员列表=[
人物(“朱丽叶”,35岁,“完整”),
人(“Coralie”,26岁,“一半”),
人物(“劳拉”,27岁,“几乎满”)
]
#调试打印
对于人员列表中的人员:
打印people.name,“还有工作”\
人。获取剩余年数(),“年数。”
打印
#调试结束打印
people\u closer\u to\u ret=min(人员列表,
key=lambda people:people.get_剩余_年()
打印“即将退休”的人的姓名
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()