这个with_default_value函数经常被称为(不精确地)为“闭包”(技术上,闭包是返回的内部函数,这里是newfunc – 参见例如

here).更一般地说,with_default_value是一个高阶函数(“HOF”):它将一个函数(func)作为参数,它还返回一个函数(newfunc)作为结果.

我看到的答案令人困惑,它与装饰器概念和Python中的构造混淆,绝对不是这样 – 特别是因为你提到func通常是内置的,比如int.装饰器也是高阶函数,而是特定的函数:返回其函数参数的装饰(即“丰富”)版本的函数(必须是唯一的参数 – “带参数的装饰器”)通过另一个级别获得函数/闭包嵌套,而不是通过赋予装饰器HOF多个参数),它被重新分配到与该函数参数完全相同的名称(因此通常具有相同的签名 – 使用装饰器,否则将非常特殊,不惯用的,不可读的等等).

所以忘记装饰器,它与案例完全无关,并专注于newfunc闭包.词汇嵌套函数可以引用(但不重新绑定)封闭函数的所有局部变量名称(包括参数名称,因为参数是局部变量) – 这就是它被称为闭包的原因:它被“封闭”这些“自由变量”.在这里,newfunc可以引用func和default – 并且确实如此.

高阶函数在Python中是很自然的东西,特别是因为函数是第一类对象(所以你不需要做任何特殊的事情来将它们作为参数传递,将它们作为函数值返回,甚至将它们存储在列表或其他容器中等等,并且在函数和其他类型的对象之间没有命名空间区别,没有因为提及等等而自动调用函数等等(这更难 – 更难 – 或者更难,取决于 – 在其他语言中这确实吸引了很多这种区别).在Python中,提到一个函数只是 – 提及;只有当函数对象(由名称或其他方式引用)后跟括号时,才会发生CALL.

这就是这个例子中的所有内容 – 如果您还有其他一些具体方面存在疑问,请随时编辑您的问题,在此发表评论等.

编辑:所以OP评论道,要求提供更多“封闭工厂”的例子.这是一个 – 想象一些抽象的GUI工具包,你正在尝试:

for i in range(len(buttons)):

buttons[i].onclick(lambda: mainwin.settitle("button %d click!" % i))

但这不起作用 – 我在lambda中是后期限制的,所以当点击一个按钮时,无论点击哪一个,我的值总是最后一个按钮的索引.有各种可行的解决方案,但封闭工厂的优雅可能性:

def makeOnclick(message):

return lambda: mainwin.settitle(message)

for i in range(len(buttons)):

buttons[i].onclick(makeOnClick("button %d click!" % i))

在这里,我们使用闭包工厂来调整变量的绑定时间! – )在一种特定的形式或另一种形式中,这是闭包工厂的一个非常常见的用例.

python函数代码,这个python函数代码如何工作?相关推荐

  1. python绘制条形图用什么函数_Python绘制正余弦函数图像完整代码

    通过python绘制正弦和余弦函数,从默认的设置开始,一步一步地调整改进,让它变得好看,变成我们初高中学习过的图象那样.通过这个过程来学习如何进行对图表的一些元素的进行调整. 01. 简单绘图 mat ...

  2. python使用del保留字定义一个函数-函数和代码复用 --Python

    1.关于递归函数的描述,以下选项中正确的是 A.包含一个循环结构 B.函数比较复杂 C.函数内部包含对本函数的再次调用 D.函数名称作为返回值 答案:D 答案解析:递归函数是指函数内部包含对本函数的再 ...

  3. matlab代码重改python代码,对应函数

    (2021)matlab代码重改python代码,对应函数--全!_Troublemaker丶的博客-CSDN博客

  4. python中的代码复用与函数递归

    代码复用与模块化设计 所谓的代复用,顾名思义,也就说同一份代码在需要的时候可以被重复使用,有两种形式:一个是函数,一个是对象. 模块化设计,简单地来讲,就是通过函数或对象封装将程序划分为模块及模块间的 ...

  5. f2py支持在fortran语言中调用其他Fortran函数或C代码或Python代码

    f2py支持在fortran语言中调用其他Fortran函数或C代码或Python代码 分类: Python Numpy_Scipy fortran MinGW_GCC_Boost f2py 2012 ...

  6. python里compile的作用_Python代码中compile()函数具有哪些功能呢?

    摘要: 下文讲述Python代码中compile()函数的功能说明,如下所示: compile()函数功能说明 compile()函数功能: 用于将一个字符串编译为字节代码 compile()函数语法 ...

  7. python数学公式代码导入_NumPy 数学函数及代数运算的实现代码

    一.实验介绍 1.1 实验内容 如果你使用 Python 语言进行科学计算,那么一定会接触到NumPy.NumPy 是支持 Python 语言的数值计算扩充库,其拥有强大的多维数组处理与矩阵运算能力. ...

  8. python join函数_一行 Python 代码能实现这么多丧心病狂的功能?

    最近看知乎上有一篇名为<一行 Python 能实现什么丧心病狂的功能?>(https://www.zhihu.com/question/37046157)的帖子,点进去发现一行Python ...

  9. python反余弦函数_Python代码中acos()函数有什么功能呢?

    摘要: 下文讲述Python代码中acos()函数的简介说明,如下所示: acos()函数功能 用于计算出x的反余弦弧度值 acos()函数语法 math.acos(x) ---------参数说明- ...

  10. python返回字符串长度的函数_Python如何查找字符串的长度?(代码示例)

    在Python中字符串是Unicode代码点的不可变序列.给定一个字符串,我们如何查找它的长度?本篇文章就来给大家介绍在Python中查找字符串长度的四种方法,希望对大家有所帮助.[相关视频教程推荐: ...

最新文章

  1. day002-HTML知识点总结:浏览器兼容性之指定IE浏览器使用chrome内核渲染页面
  2. 【c++内存分布系列】单独一个类
  3. codeforces 711B - Chris and Magic Square(矩阵0位置填数)
  4. 13寸笔记本电脑尺寸_2020笔记本电脑推荐(华为篇)
  5. python中的functools模块
  6. tar.gz 文件类型(tar文件的解压和压缩)
  7. React-native键盘遮挡输入框问题的解决
  8. lambda表达式pythonlist_Python 使用Lambda对list(列表)中指定格式字符串元素排序方法...
  9. typedef 字符串_typedef在C中使用字符数组(定义别名来声明字符串)的示例
  10. ThreadLocal和线程同步机制的对比
  11. Python3 —— 列表
  12. java 反转jia链表_Java实现单链表反转
  13. java怎么判断素数_java判断是否为素数(质数)的方法
  14. qq实验报告c语言,C语言实现QQ密码大盗(没试验过,下回验证一下)
  15. 安装Nvidia显卡驱动和CUDA
  16. Python学习基础方便查询
  17. [hdu 6355] Fireflies
  18. 什么事,是你当了领导才明白的?
  19. 香帅的北大金融学课 02 金融机构——银行
  20. [杂谈]10年前的杂志文章-清凉简装,电脑减负非诚勿扰

热门文章

  1. Linux kill 多余用户终端
  2. 11月第2周要闻回顾:漏洞修补缓慢遭质疑 反恶软行业标准推出
  3. linux下安装gcc
  4. GoLand 远程开发配置
  5. TZOJ 4813 机器翻译(模拟数组头和尾)
  6. 把excel每一行中的数据输出为一个txt文档的VBA函数
  7. V-rep学习笔记:机器人逆运动学数值解法(Cyclic Coordinate Descent Method)
  8. 8月份的To-Do List
  9. 修改linux下默认的python版本
  10. oracle exp不生成dumpfile,预估出实际导出文件的大小。