Python数字比较与类结构

 更新时间:2022年07月28日 08:39:26   作者:​ 宿者朽命  ​  
这篇文章主要介绍了Python数字比较与类结构,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

前言

版本:

  • windows 10.0
  • python 3.8

问题简述

近期看到这么一个问题,有把值分别赋值给不同的变量,想在比较大小后得到变量的名称。

a = 34
b = 55
c = 12
d = 55
max(a, b, c)  # 期望得到'b'

在该例子中,有过使用python经历的读者会知道,max处理后的结果只能返回b所指代的值,即55。而如何得到这个字符串'b'呢?

一个想法

想获取变量名绝非难事,在全局中可以用globals()获取,局部可以用locals(),在这里的难点可能在于,知道a,b,c三者之间的最大值是55,由于globals()会将所有的变量及对应的值返回,在遍历匹配中可能会返回没有参与大小比较的d变量,在实际使用上也不优雅。

有一定经验的pythoner会选择另辟蹊径,获取值比获取变量更优雅,也更容易,将当初想设置成的变量,转换为值,与原值对应,比如字典的键值对,列表等。

dict1 = {'a': 34, 'b': 55, 'c': 12}
list1 = [('a', 34), ('b', 55), ('c', 12)]

在这样的思考过程中,是不是可以用类来得到这样的结果,将名称和值作为类的属性,比较大小后返回最大值对应的名称,类的结构如下:

class Int:

    def __init__(self, name, value):
        assert isinstance(name, (str, int, float, tuple)), 'name值应该为不可变对象!'
        self.name = name
        assert isinstance(value, (int, float)), 'value值应该为数字!'
        self.value = value

    def __eq__(self, other):
        print('eq')
        return self.value == other.value

    def __gt__(self, other):
        print('gt')
        return self.value > other.value
def __ge__(self, other):
        print('ge')
        return self.value >= other.value

    def __lt__(self, other):
        print('lt')
        return self.value < other.value

    def __le__(self, other):
        print('le')
        return self.value <= other.value

定义一个类,并设置大小比较的魔法方法,等于,大于,大于等于,小于,小于等于。当值之间进行比较时,比如使用==,>, ...就会调用这些魔法方法。

在写下这篇之前,没有去探究max函数的处理逻辑,是通过魔法函数实现比较,还是其他的方式,对此翻了下官方说明。

看了后好像也不能理解具体用的啥,本人愚钝,没有去看c源码,尝试直接将几个类实例传入到max中,可以看到打印出多个gt,可以大概猜测实现逻辑,通过遍历传入的值,逐个比较,如max是多次使用>,调用__gt__魔法方法。

不难看出,每次都会比较判断,返回布尔值,通过比较结果来选取哪一个值与下一个值进行比较,回到问题上,如果有多个值需要比较,且部分跟比较的值有相同的value不参与比较,仍然可以返回出对应的值,只要将需要比较的值传入到max中,当然如果有value相同的值进行比较,不会将两个值同时返回。使用类来解决,整个结构上更为优雅,整个的工作流程也很顺畅。

总结

近期的一些认识,为什么要返回变量名,使用变量名的目的是什么,能不能将变量名转换到值上来,大多时候,定义一个变量也是为了能更好的使用其引用的值,而有时可能让变量绊了自己的脚,则需要考虑变量与值的关系,以及结构。

到此这篇关于Python数字比较与类结构的文章就介绍到这了,更多相关Python类结构内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Pandas实现聚合运算agg()的示例代码

    Pandas实现聚合运算agg()的示例代码

    在数据分析中,分组聚合二者缺一不可。对数据聚合(求和、平均值等)通常是不可避免的。pd.agg()很方便进行聚合操作。本文就来介绍一下,感兴趣的可以了解一下
    2021-07-07
  • Python Pytorch深度学习之自动微分

    Python Pytorch深度学习之自动微分

    今天小编就为大家分享一篇关于Pytorch自动微分的文章,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-10-10
  • python检测远程端口是否打开的方法

    python检测远程端口是否打开的方法

    这篇文章主要介绍了python检测远程端口是否打开的方法,实例分析了Python基于socket检测端口的技巧,需要的朋友可以参考下
    2015-03-03
  • Python rabbitMQ如何实现生产消费者模式

    Python rabbitMQ如何实现生产消费者模式

    这篇文章主要介绍了Python rabbitMQ如何实现生产消费者模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Python使用struct处理二进制的实例详解

    Python使用struct处理二进制的实例详解

    这篇文章主要介绍了Python使用struct处理二进制的实例详解的相关资料,希望通过本文大家能掌握这部分内容,需要的朋友可以参考下
    2017-09-09
  • python实现网站微信登录的示例代码

    python实现网站微信登录的示例代码

    这篇文章主要介绍了python实现网站微信登录的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 使用Python绘制三种概率曲线详解

    使用Python绘制三种概率曲线详解

    这篇文章主要为大家分享了如何利用Python实现概率曲线的绘制,文中绘制了正态分布的曲线和指数分布的曲线,感兴趣的可以了解一下
    2022-03-03
  • 使用TensorFlow实现简单线性回归模型

    使用TensorFlow实现简单线性回归模型

    这篇文章主要为大家详细介绍了使用TensorFlow实现简单线性回归模型,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • python2.7到3.x迁移指南

    python2.7到3.x迁移指南

    由于PYTHON2.7即将停止支持,小编给大家分享了一篇关python2.7到3.x迁移指南内容,希望对各位有用。
    2018-02-02
  • python绘制柱形图的方法

    python绘制柱形图的方法

    这篇文章主要为大家详细介绍了python绘制柱形图的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04

最新评论