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 相关文章推荐
在Gnumeric下使用Python脚本操作表格的教程
Apr 14 Python
python基于BeautifulSoup实现抓取网页指定内容的方法
Jul 09 Python
浅谈Python中函数的参数传递
Jun 21 Python
利用Python抓取行政区划码的方法
Nov 28 Python
Python 自动刷博客浏览量实例代码
Jun 14 Python
Python中scatter函数参数及用法详解
Nov 08 Python
python在OpenCV里实现投影变换效果
Aug 30 Python
python 利用pyttsx3文字转语音过程详解
Sep 25 Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
May 20 Python
keras自定义回调函数查看训练的loss和accuracy方式
May 23 Python
Python常用模块函数代码汇总解析
Aug 31 Python
Python多分支if语句的使用
Sep 03 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
德生1994机评
2021/03/02 无线电
php cookies中删除的一般赋值方法
2011/05/07 PHP
php遍历目录与文件夹的多种方法详解
2013/11/14 PHP
ThinkPHP采用实现三级循环代码实例
2014/07/18 PHP
PHP获取文件夹大小函数用法实例
2015/07/01 PHP
smarty中常用方法实例总结
2015/08/07 PHP
js监听表单value的修改同步问题,跨浏览器支持
2009/12/31 Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
2013/04/02 Javascript
js实现拉伸拖动iframe的具体代码
2013/08/03 Javascript
jquery获取tagName再进行判断
2014/05/29 Javascript
jquery 获取 outerHtml 包含当前节点本身的代码
2014/10/30 Javascript
基于javascript实现的搜索时自动提示功能
2014/12/26 Javascript
浅谈javascript 归并方法
2015/01/21 Javascript
javascript实现的网站访问量统计代码
2015/12/20 Javascript
由简入繁实现Jquery树状结构的方法(推荐)
2016/06/10 Javascript
深入理解JavaScript 中的匿名函数((function() {})();)与变量的作用域
2018/08/28 Javascript
vue实现条件判断动态绑定样式的方法
2018/09/29 Javascript
jQuery利用FormData上传文件实现批量上传
2018/12/04 jQuery
vuex如何重置所有state(可定制)
2019/01/17 Javascript
详解React服务端渲染从入门到精通
2019/03/28 Javascript
jQuery实现验证用户登录
2019/12/10 jQuery
Vue watch响应数据实现方法解析
2020/07/10 Javascript
python找出完数的方法
2018/11/12 Python
在Python中使用turtle绘制多个同心圆示例
2019/11/23 Python
Python JSON编解码方式原理详解
2020/01/20 Python
django中related_name的用法说明
2020/05/20 Python
Python编写单元测试代码实例
2020/09/10 Python
利用html5 canvas破解简单验证码及getImageData接口应用
2013/01/25 HTML / CSS
学员自我鉴定
2014/03/19 职场文书
春季防火方案
2014/05/10 职场文书
计算机应用应届生求职信
2014/07/12 职场文书
遗失证明范文
2015/06/19 职场文书
2015年重阳节活动主持词
2015/07/30 职场文书
导游词之贵州百里杜鹃
2019/10/29 职场文书
Navicat连接MySQL错误描述分析
2021/06/02 MySQL
python实现学生信息管理系统(面向对象)
2022/06/05 Python