Python常见面试题015.请实现一个如下功能的函数

1|0015. 请实现一个如下功能的函数

来自python黑魔法

1|1题目

  • 实现一个add函数,可以"反复"调用,得到累加的结果
def add(num): ... add(1) # 输出1 add(2) # 输出2 add(1)(2) # 输出3(即1+2) add(1)(2)(3) # 输出6

1|2思考

  • 一开始我想到的是用一个参数,类型是list,能保存用户的传参,请参考之前写的,python常见面试题003

    def add(num,container=[]): container.append(num) return sum(container) print(add(1)) # 1 print(add(2)) # 3 print(add(3)) # 6
  • 显然与题意不符,只是有点那味而已



  • 回想下装饰器的万能公式,好像有点对味

    def decorate(function_name): def inner(): function_name() return inner @decorate def target(): # 一旦被装饰,target = decorate(target) print('calling target') target() # 此处的target变了
  • 但如何实现还是个问题

1|3答案

  • 有装饰器的样子,只不过内部是个class

  • 但怎么去存储之前的值呢?

  • 答案看的我有点懵

    def add(num): class Myadd(int): def __call__(self, num): # print(self.numerator) # 你可以看到这个numerator就是最后一次调用前的和 return Myadd(self.numerator+num) return Myadd(num) print(add(1)(2)(3))
  • Myadd继承int,主要是为了拿到int的一个property==>numerator

  • 这个numerator我查了一圈不太知道他是个啥,为何能存储用过的数据

  • 定义

    numerator = property(lambda self: object(), lambda self, v: None, lambda self: None) # default """the numerator of a rational number in lowest terms"""
  • 翻译:the numerator of a rational number in lowest terms

    • 最小有理数的分子
  • int还有一些其他的属性(仅作了解)

    • denominator:最小有理数的分母

      denominator = property(lambda self: object(), lambda self, v: None, lambda self: None) # default """the denominator of a rational number in lowest terms"""
    • imag:复数虚部

      imag = property(lambda self: object(), lambda self, v: None, lambda self: None) # default """the imaginary part of a complex number"""
    • real:复数实部

      real = property(lambda self: object(), lambda self, v: None, lambda self: None) # default """the real part of a c0omplex number"""
  • 所以为何这个最小有理数的分子能存储呢?要去so上问问了。有了答案我再更新~


__EOF__

本文作者博客已废弃
本文链接https://www.cnblogs.com/wuxianfeng023/p/17283467.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   博客已废弃  阅读(99)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示