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转换摩斯密码示例
Feb 16 Python
python网络编程学习笔记(五):socket的一些补充
Jun 09 Python
python使用xlrd模块读写Excel文件的方法
May 06 Python
使用Python发送各种形式的邮件的方法汇总
Nov 09 Python
Python实现的文本简单可逆加密算法示例
May 18 Python
浅谈python中requests模块导入的问题
May 18 Python
python批量创建指定名称的文件夹
Mar 21 Python
pytorch中的上采样以及各种反操作,求逆操作详解
Jan 03 Python
MNIST数据集转化为二维图片的实现示例
Jan 10 Python
tensorflow 初始化未初始化的变量实例
Feb 06 Python
python中温度单位转换的实例方法
Dec 27 Python
Opencv实现二维直方图的计算及绘制
Jul 21 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
phpmyadmin打开很慢的解决方法
2014/04/21 PHP
培养自己的php编码规范
2015/09/28 PHP
php对文件夹进行相关操作(遍历、计算大小)
2015/11/04 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
jQuery中调用WebService方法小结
2011/03/28 Javascript
JQuery文本框高亮显示插件代码
2011/04/02 Javascript
基于JavaScript 类的使用详解
2013/05/07 Javascript
JS实现两个大数(整数)相乘
2014/04/28 Javascript
jquery常用操作小结
2014/07/21 Javascript
JavaScript生成验证码并实现验证功能
2016/09/24 Javascript
Vue.js常用指令汇总(v-if、v-for等)
2016/11/03 Javascript
完美解决IE不支持Data.parse()的问题
2016/11/24 Javascript
jQuery Validate 数组 全部验证问题
2017/01/12 Javascript
微信小程序 Toast自定义实例详解
2017/01/20 Javascript
js匿名函数使用&amp;传参(实例)
2017/09/08 Javascript
深入理解JavaScript 箭头函数
2019/05/30 Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
2019/11/01 Javascript
详细分析vue响应式原理
2020/06/22 Javascript
在vue中实现echarts随窗体变化
2020/07/27 Javascript
python实现忽略大小写对字符串列表排序的方法
2014/09/25 Python
Python PyQt5实现的简易计算器功能示例
2017/08/23 Python
Anaconda多环境多版本python配置操作方法
2017/09/12 Python
查找python项目依赖并生成requirements.txt的方法
2018/07/10 Python
Django Channels 实现点对点实时聊天和消息推送功能
2019/07/17 Python
对Django 转发和重定向的实例详解
2019/08/06 Python
Django自定义模板过滤器和标签的实现方法
2019/08/21 Python
python爬虫搭配起Bilibili唧唧的流程分析
2020/12/01 Python
python 如何读、写、解析CSV文件
2021/03/03 Python
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
英国名牌服装购物网站:OD’s Designer
2019/09/02 全球购物
巴西本土电商平台:Americanas
2020/06/21 全球购物
经典c++面试题六
2012/01/18 面试题
网络技术专业求职信
2014/07/13 职场文书
2014年优质护理服务工作总结
2014/11/14 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
归途列车观后感
2015/06/17 职场文书