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 相关文章推荐
仅用50行Python代码实现一个简单的代理服务器
Apr 08 Python
单利模式及python实现方式详解
Mar 20 Python
python重试装饰器的简单实现方法
Jan 31 Python
Python学习笔记之列表和成员运算符及列表相关方法详解
Aug 22 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
Sep 25 Python
使用python切片实现二维数组复制示例
Nov 26 Python
Python GUI自动化实现绕过验证码登录
Jan 10 Python
Python 读取xml数据,cv2裁剪图片实例
Mar 10 Python
PyCharm上安装Package的实现(以pandas为例)
Sep 18 Python
Python3 使用pip安装git并获取Yahoo金融数据的操作
Apr 08 Python
Python生成九宫格图片的示例代码
Apr 14 Python
Python first-order-model实现让照片动起来
Jun 25 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
解析CodeIgniter自定义配置文件
2013/06/18 PHP
教你如何使用php session
2013/10/28 PHP
PHP中实现中文字串截取无乱码的解决方法
2018/05/29 PHP
微信公众号之主动给用户发送消息功能
2019/06/22 PHP
基于jquery的一个OutlookBar类,动态创建导航条
2010/11/19 Javascript
jquery slibings选取同级其他元素的实现代码
2013/11/15 Javascript
为什么Node.js会这么火呢?Node.js流行的原因
2014/12/01 Javascript
js实现图片无缝滚动特效
2020/03/19 Javascript
React Native实现简单的登录功能(推荐)
2016/09/19 Javascript
javascript事件的绑定基础实例讲解(34)
2017/02/14 Javascript
setTimeout函数的神奇使用
2017/02/26 Javascript
Vue中使用vux的配置详解
2017/05/05 Javascript
使用vue中的v-for遍历二维数组的方法
2018/03/07 Javascript
vue拦截器实现统一token,并兼容IE9验证功能
2018/04/26 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
2018/12/13 Javascript
vue+elementUI实现表单和图片上传及验证功能示例
2019/05/14 Javascript
微信小程序仿抖音短视频切换效果的实例代码
2020/06/24 Javascript
vue-router定义元信息meta操作
2020/12/07 Vue.js
常用python编程模板汇总
2016/02/12 Python
django使用html模板减少代码代码解析
2017/12/12 Python
python样条插值的实现代码
2018/12/17 Python
基于Python的ModbusTCP客户端实现详解
2019/07/13 Python
python入门之基础语法学习笔记
2020/02/08 Python
python编程进阶之异常处理用法实例分析
2020/02/21 Python
Under Armour瑞典官方网站:美国高端运动科技品牌
2018/11/21 全球购物
吉尔德利巧克力公司:Ghirardelli Chocolate Company
2019/03/27 全球购物
物流专业求职计划书
2014/01/10 职场文书
大学生志愿者感言
2014/01/15 职场文书
党支部组织生活会整改方案
2014/09/30 职场文书
护理专业自荐信范文
2015/03/06 职场文书
2016毕业实习单位评语大全
2015/12/01 职场文书
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python
MySQL系列之六 用户与授权
2021/07/02 MySQL
解决redis批量删除key值的问题
2022/03/23 Redis
KVM基础命令详解
2022/04/30 Servers
Qt数据库应用之实现图片转pdf
2022/06/01 Java/Android