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 相关文章推荐
Perl中著名的Schwartzian转换问题解决实现
Jun 02 Python
Python编码类型转换方法详解
Jul 01 Python
python3 pillow生成简单验证码图片的示例
Sep 19 Python
Python 基础教程之闭包的使用方法
Sep 29 Python
利用Tkinter和matplotlib两种方式画饼状图的实例
Nov 06 Python
Python爬虫PyQuery库基本用法入门教程
Aug 04 Python
python创建文件备份的脚本
Sep 11 Python
Python设计模式之策略模式实例详解
Jan 21 Python
python3.6下Numpy库下载与安装图文教程
Apr 02 Python
Python使用20行代码实现微信聊天机器人
Jun 05 Python
深入了解Python enumerate和zip
Jul 16 Python
Python破解极验滑动验证码详细步骤
May 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
PHP var_dump遍历对象属性的函数与应用代码
2010/06/04 PHP
php的SimpleXML方法读写XML接口文件实例解析
2014/06/16 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
YII框架页面缓存操作示例
2019/04/29 PHP
php解决crontab定时任务不能写入文件问题的方法分析
2019/09/16 PHP
asp javascript 实现关闭窗口时保存数据的办法
2007/11/24 Javascript
jQuery 在光标定位的地方插入文字的插件
2012/05/10 Javascript
Jquery下EasyUI组件中的DataGrid结果集清空方法
2014/01/06 Javascript
纯JavaScript实现获取onclick、onchange等事件的值
2014/12/29 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
2015/11/16 Javascript
干货分享:让你分分钟学会javascript闭包
2015/12/25 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
浅谈SpringMVC中post checkbox 多选框value的值(隐藏域方式)
2018/01/08 Javascript
微信小程序checkbox组件使用详解
2018/01/31 Javascript
利用Node.js如何实现文件循环覆写
2019/04/05 Javascript
react实现同页面三级跳转路由布局
2019/09/26 Javascript
[04:50]2019DOTA2高校联赛秋季赛四强集锦
2019/12/27 DOTA
[01:09:16]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第一场 1月25日
2021/03/11 DOTA
Python 功能和特点(新手必学)
2015/12/30 Python
Python+Pandas 获取数据库并加入DataFrame的实例
2018/07/25 Python
python实现给scatter设置颜色渐变条colorbar的方法
2018/12/13 Python
不到40行代码用Python实现一个简单的推荐系统
2019/05/10 Python
Python 调用有道翻译接口实现翻译
2020/03/02 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
2020/04/27 Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
2020/05/20 Python
django 将自带的数据库sqlite3改成mysql实例
2020/07/09 Python
HTML5新增属性data-*和js/jquery之间的交互及注意事项
2017/08/08 HTML / CSS
玩具反斗城葡萄牙官方商城:Toys"R"Us葡萄牙
2016/10/21 全球购物
决心书范文
2014/03/11 职场文书
公司合作意向书
2014/04/01 职场文书
2014年度安全工作总结
2014/12/04 职场文书
2015年庆祝国庆节66周年演讲稿
2015/07/30 职场文书
2016大学生入党积极分子心得体会
2016/01/06 职场文书
虚拟机linux端mysql数据库无法远程访问的解决办法
2021/05/26 MySQL
HTML+CSS 实现顶部导航栏菜单制作
2021/06/03 HTML / CSS
JavaScript中MutationObServer监听DOM元素详情
2021/11/27 Javascript