如何在Python中实现数学上形如log[a](b)的式子

引言

大家好,又是我,你们的莉莉丝。这次我们研究的是,如何用Python实现,形如:

log[a](b)

这样的式子。看过我之前发的几篇文章的读者可能已经开始思考魔术方法了。虽然的确可以用魔术方法解决,不过,这次的问题有一个更加合乎常理的方法。大家可以看一下这个式子的形式。在Python中,这个的意思是对一个函数列表log的索引为a的值调用函数,参数为b。没错,这也就是最基本的原理。接下来是第一种实现方法

函数列表
import math

log = [lambda x, b=b: math.log(x, b) for b in range(11)]

实现起来并不困难,就是用列表推导式写一个表达式列表而已。这里向math借了一个log函数,所以要import一下。要说明的是,之所以用lambda表达式而不用def函数是因为lambda可以“批量生产”。不然定义这么多个函数然后全写在数组里还是有点麻烦的。

当然,这个东西是不全面的。聪明的读者已经发现了,这个数组也只是实现了整数基数而已。完全不够用嘛!

当然,你可以使用字典和lambda表达式来定义特定的小数,但是这还是不够用啊!所以,笔者又回归了她的老本行——魔术方法。

魔术方法 索引和调用

这次我们要用到的是索引__getitem__和调用__call__这俩个魔术方法,getitem可以让我们重构[]运算符,而call可以让我们重构调用函数的运算符,具体原理就是通过getitem获得索引保存到实例中,然后用call调用即可。以下是代码:

class Log:
    log = 10
    def __getitem__(self, other):
        self.log = other
        return self
    def __call__(self, other):
        return math.log(other, self.log)
log = Log()

print(log[2](2))

基于这个思路,我们可以实现其他的诸如pow[2](2)之类的方法。读者可以自己尝试一下。我们下期再见~

  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值