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 相关文章推荐
Python的垃圾回收机制深入分析
Jul 16 Python
python实现域名系统(DNS)正向查询的方法
Apr 19 Python
pytorch + visdom CNN处理自建图片数据集的方法
Jun 04 Python
python实现批量修改图片格式和尺寸
Jun 07 Python
python按时间排序目录下的文件实现方法
Oct 17 Python
python增加图像对比度的方法
Jul 12 Python
django之对FileField字段的upload_to的设定方法
Jul 28 Python
解决Django加载静态资源失败的问题
Jul 28 Python
Python中的sys.stdout.write实现打印刷新功能
Feb 21 Python
Python中私有属性的定义方式
Mar 05 Python
jupyter notebook 实现matplotlib图动态刷新
Apr 22 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
Jun 27 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
VFP与其他应用程序的集成
2006/10/09 PHP
PHP正则表达式替换站点关键字链接后空白的解决方法
2014/09/16 PHP
thinkphp模板用法和内容输出实例
2014/11/28 PHP
php使用memcoder将视频转成mp4格式的方法
2015/03/12 PHP
php正则修正符用法实例详解
2016/12/29 PHP
关于Yii中模型场景的一些简单介绍
2019/09/22 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
xml 与javascript结合的问题解决方法
2007/03/24 Javascript
javascript删除字符串最后一个字符
2014/01/14 Javascript
jQuery实现复选框成对选择及对应取消的方法
2015/03/03 Javascript
使用jQuery加载html页面到指定的div实现方法
2016/07/13 Javascript
jQuery UI插件实现百度提词器效果
2016/11/21 Javascript
node.js实现回调的方法示例
2017/03/01 Javascript
微信小程序实现倒计时60s获取验证码
2020/04/17 Javascript
浅析Visual Studio Code断点调试Vue
2018/02/27 Javascript
Three.js实现简单3D房间布局
2018/12/30 Javascript
ES6中Symbol、Set和Map用法详解
2019/08/20 Javascript
Vue之Mixins(混入)的使用方法
2019/09/24 Javascript
基于JS实现快速读取TXT文件
2020/08/25 Javascript
原生js+css实现tab切换功能
2020/09/17 Javascript
[01:20]PWL S2开团时刻第三期——团战可以输 蝙蝠必须死
2020/11/26 DOTA
Python 探针的实现原理
2016/04/23 Python
win系统下为Python3.5安装flask-mongoengine 库
2016/12/20 Python
python远程连接MySQL数据库
2019/04/19 Python
全网首秀之Pycharm十大实用技巧(推荐)
2020/04/27 Python
StubHub智利:购买和出售您的门票
2016/11/23 全球购物
美国领先的家庭健康检测试剂盒提供商:LetsGetChecked
2019/03/18 全球购物
石油大学毕业生自荐信
2014/01/28 职场文书
老公爱的承诺书
2014/03/31 职场文书
元旦联欢会策划方案
2014/06/11 职场文书
机关党员四风问题个人整改措施
2014/10/26 职场文书
财务部岗位职责
2015/02/03 职场文书
2016三八妇女节校园广播稿
2015/12/17 职场文书
MySQL官方导出工具mysqlpump的使用
2021/05/21 MySQL
基于JavaScript实现年月日三级联动
2021/06/22 Javascript
JavaWeb Servlet开发注册页面实例
2022/04/11 Java/Android