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迭代器的使用方法实例
Nov 21 Python
python之wxPython应用实例
Sep 28 Python
详解Python的Django框架中的模版相关知识
Jul 15 Python
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
Jun 09 Python
python3实现钉钉消息推送的方法示例
Mar 14 Python
python3 enum模块的应用实例详解
Aug 12 Python
决策树剪枝算法的python实现方法详解
Sep 18 Python
Python中base64与xml取值结合问题
Dec 22 Python
如何打包Python Web项目实现免安装一键启动的方法
May 21 Python
python 进制转换 int、bin、oct、hex的原理
Jan 13 Python
浅谈Python从全局与局部变量到装饰器的相关知识
Jun 21 Python
python使用shell脚本创建kafka连接器
Apr 29 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获取类中常量,属性,及方法列表的方法
2009/04/09 PHP
php HandlerSocket的使用
2011/05/02 PHP
php使用cookie显示用户上次访问网站日期的方法
2015/01/26 PHP
PHP中字符安全过滤函数使用小结
2015/02/25 PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
2016/02/26 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
在Laravel中实现使用AJAX动态刷新部分页面
2019/10/15 PHP
如何在PHP环境中使用ProtoBuf数据格式
2020/06/19 PHP
javascript学习笔记(二) js一些基本概念
2012/06/18 Javascript
javascript模块化是什么及其优缺点介绍
2013/09/02 Javascript
按下回车键指向下一个位置的一个函数代码
2014/03/10 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
2015/02/24 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
2015/03/25 Javascript
angularjs封装bootstrap时间插件datetimepicker
2016/06/20 Javascript
AngularJS ng-blur 指令详解及简单实例
2016/07/30 Javascript
Nodejs中解决cluster模块的多进程如何共享数据问题
2016/11/10 NodeJs
基于jQuery选择器之表单对象属性筛选选择器的实例
2017/09/19 jQuery
JS使用Date对象实时显示当前系统时间简单示例
2018/08/23 Javascript
微信小程序获取位置展示地图并标注信息的实例代码
2019/09/01 Javascript
Element Collapse 折叠面板的使用方法
2020/07/26 Javascript
JS操作JSON常用方法(10w阅读)
2020/12/06 Javascript
Python实现冒泡,插入,选择排序简单实例
2014/08/18 Python
用Python中的__slots__缓存资源以节省内存开销的方法
2015/04/02 Python
在Python的Tornado框架中实现简单的在线代理的教程
2015/05/02 Python
python中异常报错处理方法汇总
2016/11/20 Python
Python操作MySQL模拟银行转账
2018/03/12 Python
HTML5+CSS3绘制锯齿状的矩形
2016/03/01 HTML / CSS
销售员自我评价怎么写
2013/09/19 职场文书
农民工工资支付承诺函
2014/03/31 职场文书
餐饮投资计划书
2014/04/25 职场文书
竞选班干部演讲稿500字
2014/08/20 职场文书
酒店财务经理岗位职责
2015/04/08 职场文书
2015年行政人事部工作总结
2015/05/13 职场文书
2015年高三年级组工作总结
2015/07/21 职场文书
springboot新建项目pom.xml文件第一行报错的解决
2022/01/18 Java/Android
java.util.NoSuchElementException原因及两种解决方法
2022/06/28 Java/Android