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教程之用py2exe将PY文件转成EXE文件
Jun 12 Python
在centos7中分布式部署pyspider
May 03 Python
基于Python代码编辑器的选用(详解)
Sep 13 Python
Python中用psycopg2模块操作PostgreSQL方法
Nov 28 Python
python把数组中的数字每行打印3个并保存在文档中的方法
Jul 17 Python
深入了解Python iter() 方法的用法
Jul 11 Python
Python获取一个用户名的组ID过程解析
Sep 03 Python
python垃圾回收机制(GC)原理解析
Dec 30 Python
python圣诞树编写实例详解
Feb 13 Python
python turtle工具绘制四叶草的实例分享
Feb 14 Python
Django通过设置CORS解决跨域问题
Nov 26 Python
Python 多线程之threading 模块的使用
Apr 14 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中cookie的使用方法
2014/03/29 PHP
php实现的DateDiff和DateAdd时间函数代码分享
2014/08/16 PHP
php实现将wav文件转换成图像文件并在页面中显示的方法
2015/04/21 PHP
php正则判断是否为合法身份证号的方法
2017/03/16 PHP
php设计模式之观察者模式定义与用法经典示例
2019/09/19 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
newxtree.js代码
2007/03/13 Javascript
jquery 常用操作方法
2010/01/28 Javascript
javascript中String类的subString()方法和slice()方法
2011/05/24 Javascript
左右悬浮可分组的网站QQ在线客服代码(可谓经典)
2012/12/21 Javascript
js中replace的用法总结
2013/12/27 Javascript
在JavaScript的AngularJS库中进行单元测试的方法
2015/06/23 Javascript
Bootstrap自动适应PC、平板、手机的Bootstrap栅格系统
2016/05/27 Javascript
使用JavaScript获取URL中的参数(两种方法)
2016/11/16 Javascript
分享一个精简的vue.js 图片lazyload插件实例
2017/03/13 Javascript
jQuery滚动插件scrollable.js用法分析
2017/05/25 jQuery
微信小程序报错:this.setData is not a function的解决办法
2017/09/27 Javascript
浅谈Webpack核心模块tapable解析
2018/09/11 Javascript
python使用win32com库播放mp3文件的方法
2015/05/30 Python
Python解析并读取PDF文件内容的方法
2018/05/08 Python
python验证码识别教程之滑动验证码
2018/06/04 Python
flask入门之表单的实现
2018/07/18 Python
解决pycharm上的jupyter notebook端口被占用问题
2019/12/17 Python
python datetime处理时间小结
2020/04/16 Python
在pytorch中动态调整优化器的学习率方式
2020/06/24 Python
基于python模拟TCP3次握手连接及发送数据
2020/11/06 Python
html5简单示例_动力节点Java学院整理
2017/07/07 HTML / CSS
Sephora丝芙兰澳洲官方网站:国际知名化妆品购物
2016/10/27 全球购物
物流专业大学的自我评价
2014/01/11 职场文书
石油工程专业毕业生求职信
2014/04/13 职场文书
校园活动策划方案
2014/06/13 职场文书
先进基层党组织材料
2014/12/25 职场文书
幼儿教师辞职信
2015/02/27 职场文书
2015年党日活动总结范文
2015/03/25 职场文书
iPhone13再次曝光
2021/04/15 数码科技
pycharm部署django项目到云服务器的详细流程
2021/06/29 Python