Python闭包函数定义与用法分析


Posted in Python onJuly 20, 2018

本文实例分析了Python闭包函数定义与用法。分享给大家供大家参考,具体如下:

python的闭包

首先python闭包的作用,一个是自带作用域,另一个是延迟计算。

闭包是装饰器的基础。

闭包的基本形式:

def 外部函数名():
内部函数需要的变量

def 内部函数名()


引用外部的变量

return 内部函数

需要注意的是:

函数的作用域关系在函数定义阶段就已经固定,与调用位置无关。

无论函数在何处调用,都需要回到定义阶段去找对应的作用域关系。

例子:

# -*- coding:utf-8 -*-
#! python2
def tell_info(name):
  print("%s have money %s" %(name,money))
def foo():
  money = 100
  tell_info("bill")
foo()

该代码tell_info("bill")是在foo函数中调用,但仍然需要回到定义阶段去找作用域关系,而定义的时候引用的money就是全局的Money,当全局不存在money的时候则报错,抛出未定义错误。

所以该段代码会报错,如下所示:

Traceback (most recent call last):
  File "C:\py\3waterPyDemo\src\Demo\test.py", line 8, in <module>
    foo()
  File "C:\py\3waterPyDemo\src\Demo\test.py", line 7, in foo
    tell_info("bill")
  File "C:\py\3waterPyDemo\src\Demo\test.py", line 4, in tell_info
    print("%s have money %s" %(name,money))
NameError: global name 'money' is not defined

改成如下代码:

# -*- coding:utf-8 -*-
#! python2
def foo():
  money = 100
  name = "bill"
  def tell_info():
    print("%s have money %s" %(name,money))
  return tell_info()
foo()

则输出:

bill have money 100

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
在Mac OS上搭建Python的开发环境
Dec 24 Python
简介Python设计模式中的代理模式与模板方法模式编程
Feb 02 Python
分享python数据统计的一些小技巧
Jul 21 Python
Python实现随机选择元素功能
Sep 14 Python
Python验证文件是否可读写代码分享
Dec 11 Python
Python机器学习之SVM支持向量机
Dec 27 Python
基于scrapy的redis安装和配置方法
Jun 13 Python
Python设计模式之原型模式实例详解
Jan 18 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
Jul 06 Python
基于python解线性矩阵方程(numpy中的matrix类)
Oct 21 Python
Pytorch to(device)用法
Jan 08 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
Jan 24 Python
Django rest framework工具包简单用法示例
Jul 20 #Python
Django 中使用流响应处理视频的方法
Jul 20 #Python
Python实现手写一个类似django的web框架示例
Jul 20 #Python
python 实现求解字符串集的最长公共前缀方法
Jul 20 #Python
python实现求两个字符串的最长公共子串方法
Jul 20 #Python
Django基础知识与基本应用入门教程
Jul 20 #Python
opencv python 2D直方图的示例代码
Jul 20 #Python
You might like
一周学会PHP(视频)Http下载
2006/12/12 PHP
php date()日期时间函数详解
2010/05/16 PHP
php表单提交问题的解决方法
2011/04/12 PHP
PHP实现事件机制的方法
2015/07/10 PHP
PHP处理会话函数大总结
2015/08/05 PHP
PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)
2016/09/11 PHP
总结的一些PHP开发中的tips(必看篇)
2017/03/24 PHP
PHP实现正则表达式分组捕获操作示例
2018/02/03 PHP
PHP按一定比例压缩图片的方法
2018/10/12 PHP
权威JavaScript 中的内存泄露模式
2007/08/13 Javascript
HTML5附件拖拽上传drop &amp; google.gears实现代码
2011/04/28 Javascript
js的.innerHTML = &quot;&quot;IE9下显示有错误的解决方法
2013/09/16 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
2016/01/14 Javascript
原生javascript实现自动更新的时间日期
2016/02/12 Javascript
Laravel中常见的错误与解决方法小结
2016/08/30 Javascript
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
2017/04/10 jQuery
vue项目中v-model父子组件通信的实现详解
2017/12/10 Javascript
layer提示框添加多个按钮选择的实例
2019/09/12 Javascript
Vue中多元素过渡特效的解决方案
2020/02/05 Javascript
解决qrcode.js生成二维码时必须定义一个空div的问题
2020/07/09 Javascript
在vue中使用Echarts画曲线图的示例
2020/10/03 Javascript
JS中箭头函数与this的写法和理解
2021/01/14 Javascript
python简单实现获取当前时间
2016/08/27 Python
Python学习小技巧之列表项的推导式与过滤操作
2017/05/20 Python
在Sublime Editor中配置Python环境的详细教程
2020/05/03 Python
戴尔荷兰官方网站:Dell荷兰
2020/10/04 全球购物
放飞梦想演讲稿200字
2014/08/26 职场文书
党的群众路线教育实践活动总结材料
2014/10/30 职场文书
小学教师见习总结
2015/06/23 职场文书
2015年评职称个人工作总结
2015/10/15 职场文书
话题作文之学会尊重
2019/12/16 职场文书
python 提取html文本的方法
2021/05/20 Python
PyQt5实现多张图片显示并滚动
2021/06/11 Python
mybatis 解决从列名到属性名的自动映射失败问题
2021/06/30 Java/Android
十大最强水系宝可梦,最美宝可梦排第三,榜首大家最熟悉
2022/03/18 日漫
CSS文本阴影 text-shadow 悬停效果详解
2022/05/25 HTML / CSS