一日一技:在Python中实现阿拉伯数字加上中文数字

简介: 一日一技:在Python中实现阿拉伯数字加上中文数字

在Python 3里面,中文是可以作为变量名的,而运算符又可以重载,基于这两个特性,我们可以实现阿拉伯数字与中文数字的四则运算。

首先我们定义一个类 Num:

class Num(object):
    def __init__(self, n):
        self.n = n
    def __repr__(self):
        return self.n
    def __str__(self):
        return str(self.n)

然后把这个类初始化为各个中文数字:

一 = Num(1)
五 = Num(5)
八 = Num(8)

运行效果如下图所示:

代码里面,通过实现 __repr__,能实现在Jupyter或者Python命令行交互环境里面输入变量名回车就显示变量的值。

通过实现 __str__,能实现在Python 里面 print(变量)的时候打印出具体的值。

但现在还不够,当我们进行四则运算的时候,会报错:

为了能够正常实现 +1,我们需要实现 __add__方法:

class Num(object):
    def __init__(self, n):
        self.n = n
    def __repr__(self):
        return str(self.n)
    def __str__(self):
        return str(self.n)
    def __add__(self, x):
        return self.n + x

运行效果如下图所示:

但是,如果我们把加号两侧的数字兑换一下,代码又报错了,如下图所示:

这是由于,当我们执行 a+b的时候,Python会调用 a对象里面的 __add__方法,所以当我们执行 +1的时候,调用的是 里面的 __add__方法,这是我们自己写的,所以能够正常运行。

但是当我们执行 1+的时候,调用的是 1里面的 __add__方法。在Python里面,数字对象里面的 __add__方法只能实现数字加数字。

但是我们不能修改Python 内置数字的 __add__方法,所以我们需要使用 __radd__方法。它的作用是,在 1+执行的时候,如果 1里面的 __add__运行失败了,那么就会调用 里面的 __radd__

class Num(object):
    def __init__(self, n):
        self.n = n
    def __repr__(self):
        return str(self.n)
    def __str__(self):
        return str(self.n)
    def __add__(self, x):
        return self.n + x
    def __radd__(self, x):
        return self.n + x

运行效果如下图所示:

同样的原理,你可以自己实现减法 __sub__/__rsub__、乘法 __mul__/__rmul__和除法 __truediv__/__rtruediv__

目录
相关文章
|
消息中间件 分布式计算 大数据
大数据面经 字节跳动 (整理)
大数据面经 字节跳动 (整理)
536 0
|
存储 对象存储 Python
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
|
视频直播 Windows
FFmpeg开发笔记(四十一)结合OBS与MediaMTX实现SRT直播推流
《FFmpeg开发实战》书中介绍了直播中的RTSP、RTMP和SRT协议,SRT提供更低延迟和稳定性。FFmpeg从4.0版起支持SRT,OBS Studio和MediaMTX等工具也已支持。在Windows环境下,通过集成libsrt的FFmpeg,可以建立SRT直播系统。MediaMTX日志显示SRT服务监听8890端口,OBS Studio设置SRT推流至"publish:live"。ffplay和VLC通过"read:live"拉流成功,验证了SRT推拉流功能。更多详情见《FFmpeg开发实战:从零基础到短视频上线》。
581 2
FFmpeg开发笔记(四十一)结合OBS与MediaMTX实现SRT直播推流
|
Web App开发 缓存 Linux
FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流
《FFmpeg开发实战》书中第10章提及轻量级流媒体服务器MediaMTX,适合测试RTSP/RTMP协议,但不适合生产环境。推荐使用SRS或ZLMediaKit,其中SRS是国产开源实时视频服务器,支持多种流媒体协议。本文简述在华为欧拉系统上编译安装SRS和FFmpeg的步骤,包括安装依赖、下载源码、配置、编译以及启动SRS服务。此外,还展示了如何通过FFmpeg进行RTMP推流,并使用VLC播放器测试拉流。更多FFmpeg开发内容可参考相关书籍。
535 2
FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流
|
11月前
|
应用服务中间件 Apache nginx
pbootcms伪静态教程
pbootcms伪静态教程
|
存储 SQL 缓存
数据库存储选型经验总结
工作中总是遇到数据存储相关的Bug工单,新需求开发设计中也多多少少会有数据模型设计和存储相关的问题
2824 0
数据库存储选型经验总结
|
Web App开发 iOS开发 MacOS
解决macOS 应用安装在下载目录时遇到的 vscode 掉登录和应用无法随机启动的问题
解决macOS 应用安装在下载目录时遇到的 vscode 掉登录和应用无法随机启动的问题
317 0
|
SQL 数据采集 存储
工作经验分享:Spark调优【优化后性能提升1200%】
工作经验分享:Spark调优【优化后性能提升1200%】
1263 1
工作经验分享:Spark调优【优化后性能提升1200%】
|
机器学习/深度学习 数据采集 资源调度
深度学习炼丹-数据预处理和增强
在工业界,数据预处理步骤对模型精度的提高的发挥着重要作用。对于机器学习任务来说,广泛的数据预处理一般有四个阶段(视觉任务一般只需 Data Transformation): 数据清洗(Data Cleaning)、数据整合(Data Integration)、数据转换(Data Transformation)和数据缩减(Data Reduction)。
1115 0
|
Python
使用python-docx-template操作word文档
1.python-docx-template简介 我们知道可以使用python-docx库来创建word文档,但是对于文档的修改功能,还可以使用另一个库 python-docx-template 可以完成对word的修改工作。 python-docx-template 模块主要依赖两个库, python-docx用于读取,编写和创建子文档 , jinja2用于管理插入到模板docx中的标签 。 其基本思路是利用jinja2制作Word模板,并动态向模板中插入文字、图片、表格等内容。 安装所需要的库文件🙌
1036 0
使用python-docx-template操作word文档