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类结构内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python中数字是否为可变类型

    本文以Python3为例,包括六种数据类型: 1.数字(Number):         int整型         long长整型         float浮点数         complex复数         布尔值(0和1) 2.字符串(String) 3.列表(List) 4.元组(Tuple) 5.字典(Dictionary) 6.集合(Set) 通过id函数查看变量i的内存地址进行验证(使用hex(id(i)) 可以查看16进制的内存地址) 不可变类型:Number.Strin

  • Python的内置数据类型中的数字

    目录 Python的内置数据类型中的数字 1.变量 2.数据类型总览 3.Python是弱类型的语言 4.各数据类型的详细介绍 4.1 整数(int) 4.2 浮点数/小数(float) 5.复数(complex) 6.布尔类型(bool) Python的内置数据类型中的数字 1.变量 说数据类型之前,我们要先思考一下下面几个问题: 数据是怎么存的呢? 数据类型有啥作用呢? 各种数据类型有啥区别呢? 要想回答这些问题,首先还是要先了解一下变量的概念.那么何为变量呢? 变量(Variable)可以

  • python数字图像处理数据类型及颜色空间转换

    目录 一.图像数据类型及转换 1.unit8转float 2.float转uint8 二.颜色空间及其转换 例:rgb转灰度图 其它的转换 例:rgb转hsv 一.图像数据类型及转换 在skimage中,一张图片就是一个简单的numpy数组,数组的数据类型有很多种,相互之间也可以转换.这些数据类型及取值范围如下表所示: Data type Range uint8 0 to 255 uint16 0 to 65535 uint32 0 to 232 float -1 to 1 or 0 to 1

  • Python 数据类型中的字符串和数字

    目录 一.变量 1.变量 2.变量的命名规则 二.标准数据类型 1.字符串 字符串(string) 转义字符 修改字符串大小写 删除字符串空白 判断字符串全是字母或数字 字符串查找 字符串替换 2.数字(Number) 一.变量 1.变量 Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型. 等号(=)用来给变量赋值. 等号(=)运算符左边是一个变量

  • python数字类型和占位符详情

    目录 一.数据类型 1.数据类型的判断 2.float浮点型 3.bool布尔型 4.complex复数类型 5.转义字符 6.格式化字符串 一.数据类型 1.数据类型的判断 Number => int float complex bool 容器 => str list tuple set dict 判断类型: isinstance(数据,类型) => 如果是这个类型返回True , 否则返回False lst = [1,2,3] res = isinstance(lst,list) p

  • Python利用三层神经网络实现手写数字分类详解

    目录 前言 一.神经网络组成 二.代码实现 1.引入库 2.导入数据集 3.全连接层 4.ReLU激活函数层 5.Softmax损失层 6.网络训练与推断模块 三.代码debug 四.结果展示 补充 前言 本文做的是基于三层神经网络实现手写数字分类,神经网络设计是设计复杂深度学习算法应用的基础,本文将介绍如何设计一个三层神经网络模型来实现手写数字分类.首先介绍如何利用高级编程语言Python搭建神经网络训练和推断框架来实现手写数字分类的训练和使用. 本文实验文档下载 一.神经网络组成 一个完整的

  • python数字类型math库原理解析

    首先我们应当了解什么是math库: math库是python提供的内置数学类函数库,math库不支持复数类型,仅支持整数和浮点数运算.math库一共提供了4个数字常数和44个函数.44个函数共分为4类,包括16个数值表示函数,8个幂对数函数,16个三角对数函数和4个高等特殊函数. # 有一点需要注意:math库中的函数不能直接使用,需要先使用保留字import引用该库.如下: (1) import math (2)from math import <函数名> math.<b>(..

  • 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()获取,局部可

  • python数字图像处理之高级滤波代码详解

    本文提供许多的滤波方法,这些方法放在filters.rank子模块内. 这些方法需要用户自己设定滤波器的形状和大小,因此需要导入morphology模块来设定. 1.autolevel 这个词在photoshop里面翻译成自动色阶,用局部直方图来对图片进行滤波分级. 该滤波器局部地拉伸灰度像素值的直方图,以覆盖整个像素值范围. 格式:skimage.filters.rank.autolevel(image, selem) selem表示结构化元素,用于设定滤波器. from skimage im

  • python 数字类型和字符串类型的相互转换实例

    一.python中字符串转换成数字 (方法1) 类中进行导入:import string str='555' num=string.atoi(str) num即为str转换成的数字 转换为浮点数:string.atof(str) (方法2)直接int int(str)即可. 二.数字转换成字符串 num=322 str='%d'%num str即为num转换成的字符串 以上这篇python 数字类型和字符串类型的相互转换实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持

  • Python数字图像处理之霍夫线变换实现详解

    在图片处理中,霍夫变换主要是用来检测图片中的几何形状,包括直线.圆.椭圆等. 在skimage中,霍夫变换是放在tranform模块内,本篇主要讲解霍夫线变换. 对于平面中的一条直线,在笛卡尔坐标系中,可用y=mx+b来表示,其中m为斜率,b为截距.但是如果直线是一条垂直线,则m为无穷大,所有通常我们在另一坐标系中表示直线,即极坐标系下的r=xcos(theta)+ysin(theta).即可用(r,theta)来表示一条直线.其中r为该直线到原点的距离,theta为该直线的垂线与x轴的夹角.如

  • 浅析Python数字类型和字符串类型的内置方法

    一.数字类型内置方法 1.1 整型的内置方法 作用 描述年龄.号码.id号 定义方式 x = 10 x = int('10') x = int(10.1) x = int('10.1') # 报错 内置方法 没有内置方法,只有算术运算和比较运算 存在一个值还是多个值 存一个值 有序or无序 有序:有索引:无序:无索引 压根就没有这一说 可变or不可变(重点) 数字类型不可变 可变(变量值而言) lis = [1,2,3] print(id(lis)) lis[0] = 2 #lis-->[2,2

  • 制作Python数字华容道的实现(可选择关卡)

    由于比赛需要,我这边制作了一份数字华容道,内含有3,4,5阶的数字华容道,开头在壳窗口内选择,运用了随机数模块(random)和图形化用户界面(tkinter) 下面是程序完整代码 # coding:utf-8 # """ #============================================================ 作者:@Qss 2021年3月20日起草 2021年3月21日完工 2021年3月23日一次优化完成 2021年3月31日完成二次优

  • python数字图像处理之估计噪声参数

    估计噪声参数 周期噪声的参数通常是通过检测图像的傅里叶谱来估计的. 只能使用由传感器生成的图像时,可由一小片恒定的背景灰度来估计PDF的参数. 来自图像条带的数据的最简单用途是,计算灰度级的均值和方差.考虑由 S S S表示的一个条带(子图像),并令 P S ( z i ) P_{S}(z_i) PS​(zi​), i = 0 , 1 , 2 , - , L − 1 i = 0, 1, 2, \dots, L-1 i=0,1,2,-,L−1表示 S S S中的像素灰度的概率估计(归一化直方图值)

  • Python数字/字符串补零操作实例代码

    有时候在使用 Python 的时候,想要对一个数字或者字符串进行补零操作,即把「1」变为一个八位数的「00000001」,这个时候可以使用一下方法来进行补零. 字符串补零: 可以使用 zfill() 函数来给字符串补零: >>> str = "123" >>> print(str.zfill(8)) 00000123 还能把整数转化成字符来使用 zfill() 补零: >>> num = 123 >>> print

  • python数字转对应中文的方法总结

    本文操作环境: windows7系统,DELL G3电脑,python3.5版 python实现将阿拉伯数字转换成中文 第一种转换方式: 1 --> 一 12 --> 一二 def num_to_char(num): """数字转中文""" num=str(num) new_str="" num_dict={"0":u"零","1":u"一&qu

  • Python数字图像处理基础直方图详解

    目录 直方图的定义 直方图的性质 直方图的应用 图像增强 图像分割 图像识别 Python直方图的计算 直方图的定义 直方图的性质 只统计某个灰度级出现的次数,图像的大小不一样的话, 某灰度值的像素出现的次数是不一样的. 那如果我们在这基础上除以像素总个数的话,那就是某一灰度级出现的概率,那么这样的话不同大小的同一内容图像其灰度直方图是一样的. 直方图的应用 图像增强 图像分割 图像识别 Python直方图的计算 import cv2 import numpy as np import matp

随机推荐