最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

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

来源:博客园

015. 请实现一个如下功能的函数

来自python黑魔法

题目

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

思考

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

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


    (资料图)

  • 可以用reduce递推来实现吗?也不像。reduce的用法可以参考Python函数式编程之map/filter/reduce/sorted
  • 回想下装饰器的万能公式,好像有点对味

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

答案

  • 有装饰器的样子,只不过内部是个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上问问了。有了答案我再更新~

关键词: