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中变量的拷贝和作用域问题
May 05 Python
Windows下安装python2和python3多版本教程
Mar 30 Python
python操作redis方法总结
Jun 06 Python
numpy.random模块用法总结
May 27 Python
利用selenium爬虫抓取数据的基础教程
Jun 10 Python
对pyqt5之menu和action的使用详解
Jun 20 Python
python 绘制拟合曲线并加指定点标识的实现
Jul 10 Python
Python求凸包及多边形面积教程
Apr 12 Python
pyecharts动态轨迹图的实现示例
Apr 17 Python
基于python实现查询ip地址来源
Jun 02 Python
OpenCV Python实现图像指定区域裁剪
Mar 12 Python
Python 捕获代码中所有异常的方法
Aug 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
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
php之curl实现http与https请求的方法
2014/10/21 PHP
thinkphp中AJAX返回ajaxReturn()方法分析
2016/12/06 PHP
php中照片旋转 (orientation) 问题的正确处理
2017/02/16 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
2018/07/20 PHP
javascript html 静态页面传参数
2009/04/10 Javascript
js获取时间(本周、本季度、本月..)
2013/11/22 Javascript
javascript使用正则表达式实现去掉空格之后的字符
2015/02/15 Javascript
jquery实现右键菜单插件
2015/03/29 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
2016/03/01 Javascript
javascript 常用验证函数总结
2016/06/28 Javascript
浅谈时钟的生成(js手写简洁代码)
2016/08/20 Javascript
nodejs入门教程一:概念与用法简介
2017/04/24 NodeJs
layui结合form,table的全选、反选v1.0示例讲解
2018/08/15 Javascript
微信小程序使用for循环动态渲染页面操作示例
2018/12/25 Javascript
微信小程序 点击切换样式scroll-view实现代码实例
2019/10/11 Javascript
node koa2 ssr项目搭建的方法步骤
2020/12/11 Javascript
[50:29]2014 DOTA2华西杯精英邀请赛 5 24 DK VS iG
2014/05/26 DOTA
[01:19:11]Ti4 循环赛第二日 NaVi.us vs iG
2014/07/11 DOTA
[49:11]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第二场 12.20
2020/12/23 DOTA
python Django批量导入数据
2016/03/25 Python
Python设计模式之命令模式简单示例
2018/01/10 Python
python3爬取torrent种子链接实例
2020/01/16 Python
Python实现企业微信机器人每天定时发消息实例
2020/02/25 Python
python 的numpy库中的mean()函数用法介绍
2020/03/03 Python
Python批量安装卸载1000个apk的方法
2020/04/10 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
2020/12/03 Python
加拿大领先的冒险和户外零售商:Atmosphere
2017/12/19 全球购物
寻找迷宫的一条出路,o通路;X:障碍
2016/07/10 面试题
CSS实现fullpage.js全屏滚动效果的示例代码
2021/03/24 HTML / CSS
社区党建工作方案
2014/06/10 职场文书
政府班子四风问题整改措施思想汇报
2014/10/08 职场文书
2014年大班保育员工作总结
2014/12/02 职场文书
2014年党风廉政工作总结
2014/12/03 职场文书
网络营销计划
2015/01/17 职场文书
雷锋观后感
2015/06/10 职场文书