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抓取京东价格分析京东商品价格走势
Jan 09 Python
django反向解析和正向解析的方式
Jun 05 Python
对Python3 goto 语句的使用方法详解
Feb 16 Python
基于sklearn实现Bagging算法(python)
Jul 11 Python
对Django url的几种使用方式详解
Aug 06 Python
python数值基础知识浅析
Nov 19 Python
PyCharm使用之配置SSH Interpreter的方法步骤
Dec 26 Python
Python转换itertools.chain对象为数组的方法
Feb 07 Python
利用python中集合的唯一性实现去重
Feb 11 Python
TensorFlow中如何确定张量的形状实例
Jun 23 Python
Python中读取文件名中的数字的实例详解
Dec 25 Python
Python Pandas常用函数方法总结
Jun 15 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 删除记录同时删除图片文件的实现代码
2010/05/12 PHP
php开启安全模式后禁用的函数集合
2011/06/26 PHP
php环境无法上传文件的解决方法
2014/04/30 PHP
怎样搭建PHP开发环境
2015/07/28 PHP
php自动载入类用法实例分析
2016/06/24 PHP
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
一款基于jQuery的图片场景标注提示弹窗特效
2015/01/05 Javascript
使用javascript实现雪花飘落的效果
2015/01/13 Javascript
JS实现从连接中获取youtube的key实例
2015/07/02 Javascript
自动完成的搜索框javascript实现
2016/02/26 Javascript
Vue组件和Route的生命周期实例详解
2018/02/10 Javascript
JavaScript实现简单轮播图效果
2018/12/01 Javascript
Mint UI实现A-Z字母排序的城市选择列表
2018/12/28 Javascript
ES6 迭代器与可迭代对象的实现
2019/02/11 Javascript
9102年webpack4搭建vue项目的方法步骤
2019/02/20 Javascript
vue 实现移动端键盘搜索事件监听
2019/11/06 Javascript
实例讲解React 组件
2020/07/07 Javascript
Python简单实现自动删除目录下空文件夹的方法
2017/08/29 Python
python数据封装json格式数据
2018/03/04 Python
浅析python3中的os.path.dirname(__file__)的使用
2018/08/30 Python
Django框架会话技术实例分析【Cookie与Session】
2019/05/24 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
2019/08/13 Python
Python3 sys.argv[ ]用法详解
2019/10/24 Python
python中删除某个元素的方法解析
2019/11/05 Python
基于Pyinstaller打包Python程序并压缩文件大小
2020/05/28 Python
css3 background属性调整增强介绍
2010/12/18 HTML / CSS
HTML5实现桌面通知 提示功能
2017/10/11 HTML / CSS
英国排名第一的最新设计师品牌手表独立零售商:TIC Watches
2016/09/24 全球购物
Schecker荷兰:狗狗用品和配件
2019/06/06 全球购物
高级文秘工作总结的自我评价
2013/09/28 职场文书
机械电子工程毕业生自荐信
2013/11/23 职场文书
优秀研究生自我鉴定
2013/12/04 职场文书
深入开展党的群众路线教育实践活动方案
2014/02/04 职场文书
网吧最新创业计划书范文
2014/03/27 职场文书
学前班学生评语
2014/12/29 职场文书
你真的会用Mysql的explain吗
2022/03/31 MySQL