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网络编程之TCP通信实例和socketserver框架使用例子
Apr 25 Python
Python脚本简单实现打开默认浏览器登录人人和打开QQ的方法
Apr 12 Python
分享6个隐藏的python功能
Dec 07 Python
python使用Flask操作mysql实现登录功能
May 14 Python
pip install urllib2不能安装的解决方法
Jun 12 Python
django session完成状态保持的方法
Nov 27 Python
Python实现将多个空格换为一个空格.md的方法
Dec 20 Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
Jul 06 Python
对Django 中request.get和request.post的区别详解
Aug 12 Python
自适应线性神经网络Adaline的python实现详解
Sep 30 Python
Python基于内置库pytesseract实现图片验证码识别功能
Feb 24 Python
Django haystack实现全文搜索代码示例
Nov 28 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函数)
2006/10/09 PHP
ThinkPHP文件上传实例教程
2014/08/22 PHP
php获取'/'传参的值简单方法
2017/07/13 PHP
JS中如何设置readOnly的值
2013/12/25 Javascript
设置jsf的选择框h:selectOneMenu为不可编辑状态的方法
2014/01/07 Javascript
Ionic如何创建APP项目
2016/06/03 Javascript
关于angularJs指令的Scope(作用域)介绍
2016/10/25 Javascript
AngularJS全局scope与Isolate scope通信用法示例
2016/11/22 Javascript
详解Nodejs基于mongoose模块的增删改查的操作
2016/12/21 NodeJs
JS正则表达式修饰符global(/g)用法分析
2016/12/27 Javascript
Vue 组件传值几种常用方法【总结】
2018/05/28 Javascript
jQuery实现购物车的总价计算和总价传值功能
2018/11/28 jQuery
vue-simple-uploader上传成功之后的response获取代码
2020/09/07 Javascript
Python 调用VC++的动态链接库(DLL)
2008/09/06 Python
python daemon守护进程实现
2016/08/27 Python
python中异常报错处理方法汇总
2016/11/20 Python
Python简单的制作图片验证码实例
2017/05/31 Python
Python与R语言的简要对比
2017/11/14 Python
Python利用scapy实现ARP欺骗的方法
2019/07/23 Python
python3实现elasticsearch批量更新数据
2019/12/03 Python
Python list运算操作代码实例解析
2020/01/20 Python
python使用ctypes调用扩展模块的实例方法
2020/01/28 Python
Python中and和or如何使用
2020/05/28 Python
STP协议的主要用途是什么?为什么要用STP
2012/12/20 面试题
心理学专业毕业生推荐信范文
2013/11/21 职场文书
工商企业管理实习自我鉴定
2013/12/04 职场文书
教师开学感言
2014/02/14 职场文书
社区母亲节活动记录
2014/03/06 职场文书
信访工作汇报材料
2014/10/27 职场文书
2014年大学生工作总结
2014/11/20 职场文书
工作态度恶劣检讨书
2015/05/06 职场文书
观后感格式
2015/06/19 职场文书
初中英语教师个人工作总结2015
2015/07/21 职场文书
法制工作总结2015
2015/07/23 职场文书
学校教学管理制度
2015/08/06 职场文书
MySQL数据库优化之通过索引解决SQL性能问题
2022/04/10 MySQL