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中使用PIL模块对图片进行高斯模糊处理的教程
May 05 Python
python中快速进行多个字符替换的方法小结
Dec 15 Python
python3中int(整型)的使用教程
Mar 23 Python
python中日志logging模块的性能及多进程详解
Jul 18 Python
python 全局变量的import机制介绍
Sep 07 Python
简单谈谈python中的lambda表达式
Jan 19 Python
Python实现的简单计算器功能详解
Aug 25 Python
python无限生成不重复(字母,数字,字符)组合的方法
Dec 04 Python
python利用Opencv实现人脸识别功能
Apr 25 Python
Python模拟FTP文件服务器的操作方法
Feb 18 Python
Python logging日志库空间不足问题解决
Sep 14 Python
OpenCV-Python使用cv2实现傅里叶变换
Jun 09 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在字符串中查找指定字符串并删除的代码
2008/10/02 PHP
php中批量替换文件名的实现代码
2011/07/20 PHP
javascript appendChild,innerHTML,join性能比较代码
2009/08/29 Javascript
window.onbeforeunload方法在IE下无法正常工作的解决办法
2010/01/23 Javascript
基于jQuery的弹出消息插件 DivAlert之旅(一)
2010/04/01 Javascript
document.getElementById介绍
2011/09/13 Javascript
关于jQuery对象数据缓存Cache原理以及jQuery.data详解
2013/04/07 Javascript
angularJS 中$scope方法使用指南
2015/02/09 Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
2015/03/02 Javascript
javascript实现简单的全选和反选功能
2016/01/05 Javascript
js正则表达式replace替换变量方法
2016/05/21 Javascript
详解JS中定时器setInterval和setTImeout的this指向问题
2017/01/06 Javascript
Vue.js中组件中的slot实例详解
2017/07/17 Javascript
Mongoose中document与object的区别示例详解
2017/09/18 Javascript
js数据类型检测总结
2018/08/05 Javascript
JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例
2018/12/14 Javascript
记一次用vue做的活动页的方法步骤
2019/04/11 Javascript
js实现滑动进度条效果
2020/08/21 Javascript
[01:13:17]Secret vs NB 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
python获取多线程及子线程的返回值
2017/11/15 Python
Python使用django框架实现多人在线匿名聊天的小程序
2017/11/29 Python
使用python获取csv文本的某行或某列数据的实例
2018/04/03 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
2018/04/05 Python
详解Django CAS 解决方案
2019/10/30 Python
Python实现不规则图形填充的思路
2020/02/02 Python
美国百年历史早餐食品供应商:Wolferman’s
2017/01/18 全球购物
英国领先的鞋类零售商和顶级品牌的官方零售商:Wynsors
2020/02/17 全球购物
sort命令的作用和用法
2012/11/04 面试题
课外访万家心得体会
2014/09/03 职场文书
2014年会计工作总结
2014/11/27 职场文书
2014保险公司个人工作总结
2014/12/09 职场文书
龙门石窟导游词
2015/02/02 职场文书
朋友离别感言
2015/08/04 职场文书
《普罗米修斯》教学反思
2016/02/22 职场文书
Win11怎样将锁屏账户头像图片改成动画视频
2021/11/21 数码科技