首页 > 编程语言 >Python常见面试题015.请实现一个如下功能的函数

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

时间:2023-04-03 16:49:12浏览次数:58  
标签:面试题 Python self numerator None add num 015 lambda

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

来自python黑魔法

题目

  • 实现一个add函数,可以"反复"调用,得到累加的结果
def add(num):
    ...
add(1)  # 输出1
add(2)  # 输出2
add(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)) # 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变了
    
  • 但如何实现还是个问题

答案

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

标签:面试题,Python,self,numerator,None,add,num,015,lambda
From: https://www.cnblogs.com/wuxianfeng023/p/17283467.html

相关文章

  • 力扣---面试题 02.01. 移除重复节点
    编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。示例1:输入:[1,2,3,3,2,1]输出:[1,2,3]示例2:输入:[1,1,1,1,2]输出:[1,2]提示:链表长度在[0,20000]范围内。链表元素在[0,20000]范围内。进阶:如果不得使用临时缓冲区,该怎么解决?来源:力扣(LeetC......
  • Python 自动化指南(繁琐工作自动化)第二版:十九、处理图像
    原文:https://automatetheboringstuff.com/2e/chapter19/如果你有一台数码相机,或者即使你只是从手机上传照片到脸书,你可能会一直碰到数码图像文件。你可能知道如何使用基本的图形软件,如微软的画图或Paintbrush,甚至更高级的应用,如AdobePhotoshop。但是如果你需要编辑大量的图......
  • Python 自动化指南(繁琐工作自动化)第二版:二十、使用 GUI 自动化控制键盘和鼠标
    原文:https://automatetheboringstuff.com/2e/chapter20/了解用于编辑电子表格、下载文件和启动程序的各种Python模块是很有用的,但有时您需要使用的应用没有任何模块。在计算机上实现任务自动化的终极工具是你编写的直接控制键盘和鼠标的程序。这些程序可以通过发送虚拟击键......
  • Python 自动化指南(繁琐工作自动化)第二版:附录 A:安装第三方模块
    原文:https://automateboringuff.com/2e/appendix/出版后添加:你可以通过安装带有PIP的automateboringstuff模块来安装所有需要的模块(带有本书中使用的版本)。从命令提示符或终端窗口运行pipinstall--userautomateboringstuff。许多开发人员编写了他们自己的模块,将Pytho......
  • Python 自动化指南(繁琐工作自动化)第二版:附录 B:运行程序
    原文:https://automateboringuff.com/2e/appendixb/如果您在Mu中打开了一个程序,运行它只需按F5或单击窗口顶部的运行按钮。这是一种在编写程序的同时运行程序的简单方法,但是打开Mu来运行你完成的程序可能是一种负担。根据您使用的操作系统,有更方便的方法来执行Python脚......
  • Python 自动化指南(繁琐工作自动化)第二版:十、组织文件
    原文:https://automatetheboringstuff.com/2e/chapter10/在前一章中,你学习了如何在Python中创建和写入新文件。您的程序也可以组织硬盘上预先存在的文件。也许你有过这样的经历:浏览一个装满几十个、几百个、甚至几千个文件的文件夹,然后手动复制、重命名、移动或压缩它们。或......
  • Python 自动化指南(繁琐工作自动化)第二版:十一、调试
    原文:https://automatetheboringstuff.com/2e/chapter11/既然你已经知道了足够多的知识来编写更复杂的程序,你可能会开始发现其中不那么简单的错误。这一章介绍了一些工具和技术,用于查找程序中错误的根本原因,帮助您更快、更省力地修复错误。套用程序员之间的一个老笑话,写代码占......
  • Python 自动化指南(繁琐工作自动化)第二版:一、PYTHON 基础知识
    原文:https://automatetheboringstuff.com/2e/chapter1/Python编程语言具有广泛的语法结构、标准库函数和交互式开发环境特性。幸运的是,你可以忽略其中的大部分;你只需要学会足够多的东西来编写一些方便的小程序。但是,在做任何事情之前,您必须学习一些基本的编程概念。就像一个......
  • 【Python】 pytest 之Hook函数 (钩子函数)
    Hook函数(钩子函数)钩子函数在pytest称之为Hook函数,它pytest框架的开发者,为了让用户更好的去扩展开发预留的一些函数。而预留的这些函数,在整个测试执行的生命周期中特定的阶段会自动去调用执行关于 pytest 中的预留钩子,可以通过开发插件,和在conftest.py去实现这些钩子......
  • Python 自动化指南(繁琐工作自动化)第二版:二、流程控制
    原文:https://automatetheboringstuff.com/2e/chapter2/所以,你知道单个指令的基本原理,程序就是一系列指令。但是编程的真正优势不仅仅是像周末跑腿一样一个接一个地运行指令。根据表达式的求值方式,程序可以决定跳过指令,重复指令,或者从几条指令中选择一条来运行。事实上,你几乎从......