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中利用Into包整洁地进行数据迁移的教程
Mar 30 Python
Python计算斗牛游戏概率算法实例分析
Sep 26 Python
Python内建函数之raw_input()与input()代码解析
Oct 26 Python
Python扩展内置类型详解
Mar 26 Python
解决pyinstaller打包exe文件出现命令窗口一闪而过的问题
Oct 31 Python
python中import与from方法总结(推荐)
Mar 21 Python
python交互模式下输入换行/输入多行命令的方法
Jul 02 Python
PyCharm 2020 激活到 2100 年的教程
Mar 25 Python
python nohup 实现远程运行不宕机操作
Apr 16 Python
在pycharm中关掉ipython console/PyDev操作
Jun 09 Python
基于pytorch中的Sequential用法说明
Jun 24 Python
基于Python实现天天酷跑功能
Jan 06 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计算两个日期时间差(返回年、月、日)
2014/06/19 PHP
php按字符无乱码截取中文的方法
2015/03/27 PHP
php上传图片获取路径及给表单字段赋值的方法
2016/01/23 PHP
PHP识别二维码的方法(php-zbarcode安装与使用)
2016/07/07 PHP
Jquery为单选框checkbox绑定单击click事件
2012/12/18 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
javascript实现页面刷新时自动清空表单并选中的方法
2015/07/18 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
2017/04/14 Javascript
js用类封装pop弹窗组件
2017/10/08 Javascript
angularjs实现猜大小功能
2017/10/23 Javascript
vue项目优化之通过keep-alive数据缓存的方法
2017/12/11 Javascript
jQuery实现每日秒杀商品倒计时功能
2019/09/06 jQuery
vue+element使用动态加载路由方式实现三级菜单页面显示的操作
2020/08/04 Javascript
vue组件入门知识全梳理
2020/09/21 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
2020/12/14 Vue.js
跟老齐学Python之集成开发环境(IDE)
2014/09/12 Python
Python XML RPC服务器端和客户端实例
2014/11/22 Python
详解Django中Request对象的相关用法
2015/07/17 Python
python中文分词,使用结巴分词对python进行分词(实例讲解)
2017/11/14 Python
python 连接各类主流数据库的实例代码
2018/01/30 Python
Python多进程原理与用法分析
2018/08/21 Python
使用python实现语音文件的特征提取方法
2019/01/09 Python
python3.6使用SMTP协议发送邮件
2020/05/20 Python
Python模块zipfile原理及使用方法详解
2020/08/04 Python
空气的环保标语
2014/06/12 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书
劳动仲裁撤诉申请书
2015/05/18 职场文书
党支部审查意见
2015/06/02 职场文书
会议新闻稿
2015/07/17 职场文书
情况说明书怎么写
2015/10/08 职场文书
高一语文教学反思
2016/02/16 职场文书
2016孝老爱亲模范事迹材料
2016/02/26 职场文书
来探秘“德国中小企业”的成功之道
2019/07/26 职场文书
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
2021/05/25 Python
2007年老电脑安装win11会怎么样? 网友实测win11在老电脑运行良好
2021/11/21 数码科技
win10电脑老是死机怎么办?win10系统老是死机的解决方法
2022/08/05 数码科技