性能惩罚肯定存在。如果函数是在对另一个函数的调用中创建的,那么每次调用外部函数时都会创建函数对象。但这种惩罚很小,而且通常可以忽略不计。尤其要考虑到一个显而易见的事实:在大多数情况下,只有当嵌套函数不能放在外部时,才应该创建它。在

可能需要嵌套函数的原因是需要访问嵌套函数内部的外部函数的作用域变量。通常这会导致直接或间接地从外部函数返回内部函数对象(比如在decorators中),或者,可能会导致将内部函数作为回调函数传递到某个地方。嵌套函数访问的变量将一直存在,直到嵌套函数对象被销毁为止,并且由于每个实例都看到来自不同范围实例的变量,因此它们对于嵌套函数的不同实例也会有所不同。在

在我看来,仅仅比较创建一个空的内部函数所需的时间与使用放置在外部的相同函数几乎毫无意义。性能差异纯粹是由代码行为的差异引起的。所需的代码行为应该使您选择将函数放置在何处。在

只是一个小例子:def outer(n):

v1 = "abc%d" % n

v2 = "def"

def inner():

print locals().keys()

return v1

v1 = "_" + v1

return inner

f1 = outer(1)

f2 = outer(2)

print f1()

print f2()

输出为:

^{pr2}$

关键时刻:内部函数的locals()只包含它使用的外部函数局部变量(v1,而不是v2)。

v1在函数对象创建后更改。然而,即使v1的类型是不可变的(str),内部函数仍然可以看到这些变化。因此,内部函数看到的是外部函数局部变量的真实子集,而不仅仅是在创建函数对象时存储的引用。幸运的是,内部函数对象的存在并不能阻止v1以外的范围变量被破坏。如果我用销毁时打印的对象替换v2值,当外部函数退出时,它会立即打印消息。

inner()的不同实例不共享单个外部作用域实例:v1值不同。

如果不使用嵌套函数,则无法实现所有这些效果。这就是为什么应该使用嵌套函数,事实上没有性能损失:额外的行为需要额外的时间。如果需要额外的行为,应该使用嵌套函数。如果你不需要它,你不应该。在

python 嵌套函数过多_嵌套函数的性能开销是多少?相关推荐

  1. sed -i 单引号中嵌套双引号_【函数应用】IF函数的多层嵌套

    F是一个Excel 里面的一个逻辑函数,你可以简单的理解为如果满足条件就返回一个指定的值,如果不满足条件,就会返回另一个值,该返回的值可以是字符串,也可以是逻辑值(false & true), ...

  2. python查看函数定义_从函数内函数定义看python的函数实现

    一.问题 在C/C++中,函数的定义本质上是在编译阶段完成,而函数调用是由链接完成.但是对于python这种语言,函数的定义和调用都是由解释器在运行时完成,或者说,解释器在执行函数定义的时候,同样是生 ...

  3. python函数知识点总结_函数总结_python函数总结_高中函数知识点总结 - 云+社区 - 腾讯云...

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! postgresql窗口函数总结postgresql窗口函数总结 1窗口函数说明 ...

  4. python 返回函数对象_返回函数

    函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = ...

  5. mysql 开窗函数 累加_开窗函数在MySql中的使用

    MySql在8.0的版本增加了对开窗函数的支持,终于可以在MySql使用开窗函数了.开窗函数又称OLAP函数(Online Analytical Processing).开窗函数的语法结构: #Key ...

  6. SQL 常用函数整理_日期函数(一)

    SQL日期函数 1.DATEADD 函数作用:按照指定的单位datepart和幅度delta修改date的值. 语法示例:dateadd(datetime date, bigint delta, st ...

  7. 初识python评课稿_开平方函数 python

    信息举报 时间:2021-02-05 本页为您甄选多篇描写开平方函数 python,开平方函数 python精选,开平方函数 python大全,有议论,叙事 ,想象等形式.文章字数有400字.600字 ...

  8. python非线性最小二乘拟合_非线性函数的最小二乘拟合——兼论Jupyter notebook中使用公式 [原创]...

    突然有个想法,利用机器学习的基本方法--线性回归方法,来学习一阶rc电路的阶跃响应,从而得到rc电路的结构特征--时间常数τ(即r*c).回答无疑是肯定的,但问题是怎样通过最小二乘法.正规方程,以更多 ...

  9. python做表格教程_表格函数教程

    表格存储触发函数计算示例之 Nodejs/Php/Java/C# Runtime 前言 函数计算(Function Compute)是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只 ...

最新文章

  1. INSTALL_FAILED_USER_RESTRICTED
  2. Ado.Net实现简易(省、市、县)三级联动查询,还附加Access数据
  3. Python学习:数据结构
  4. 初探swift语言的学习笔记二(可选类型?和隐式可选类型!)
  5. MongoDB Shell操作
  6. leetcode题库1314-- 矩阵区域和
  7. Exchange2003反病毒
  8. iCollections for Mac(桌面整理工具)
  9. PHP在线教育平台源码 网课小程序源码
  10. 蓝桥杯web:2.【Bug 调试】修复注册验证问题
  11. 图像边缘检测新方向--量子算法
  12. 《JavaScript DOM编程艺术》知识整理
  13. iOS 工具篇一一如何导出ipa文件和ipa文件安装在手机
  14. python quit函数作用_初识Python之基础知识
  15. root登录报错无权限,root权限突然没有了
  16. PTA7-2 试试手气
  17. 自定义SeekBar实现实现进度提示随thum移动
  18. 【UE4】HTTP下载
  19. R语言高分辨率遥感卫星数据处理
  20. python中list线程安全问题

热门文章

  1. 一个 15 年 SAP ABAP 开发人员分享的 SAPGUI 一些个性化设置和实用小技巧试读版
  2. Win10文件夹选项在哪里打开?Win10文件夹选项打开方法
  3. maatwebsite/excel 3.0版本使用方法
  4. 关于右键菜单函数  trackpopupmenu
  5. OpenFeign超时时间控制
  6. HTML怎么使盒子中的盒子置右/左
  7. 通信报文中的校验方式
  8. DICOM文件即内部信息的读取
  9. 云笔记管理系统之项目介绍
  10. A股市场全景分析系列—基于涨停板统计市场情绪指标