Python闭包函数定义与用法分析

yipeiwu_com6年前Python基础

本文实例分析了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\jb51PyDemo\src\Demo\test.py", line 8, in <module>
    foo()
  File "C:\py\jb51PyDemo\src\Demo\test.py", line 7, in foo
    tell_info("bill")
  File "C:\py\jb51PyDemo\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数学运算技巧总结》、《Python数据结构与算法教程》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程

希望本文所述对大家Python程序设计有所帮助。

相关文章

python变量不能以数字打头详解

在编写python函数时,无意中发现一个问题:python中的变量不能以数字打头,以下函数中定义了一个变量3_num_varchar,执行时报错。 函数如下: def databas...

Python基于滑动平均思想实现缺失数据填充的方法

在时序数据处理过程中,我们经常会遇到由于现实中的种种原因导致获取的数据缺失的情况,这里的数据缺失不单单是指为‘NaN'的数据,比如在AQI数据中,0是不可能出现的,这时候如果数据中出现了...

浅谈PySpark SQL 相关知识介绍

浅谈PySpark SQL 相关知识介绍

1 大数据简介 大数据是这个时代最热门的话题之一。但是什么是大数据呢?它描述了一个庞大的数据集,并且正在以惊人的速度增长。大数据除了体积(Volume)和速度(velocity)...

django将网络中的图片,保存成model中的ImageField的实例

有这样的情形,django个人头像在model中是: class UserProfile(AbstractUser): """ 用户 """ name = models.Ch...

python先序遍历二叉树问题

python先序遍历二叉树问题

问题 如何遍历一个二叉树 遍历二叉树就是访问二叉树的每一个节点 二叉树父结点下先左访问,先序遍历(根左右) 例如:遍历以下的二叉树 遍历结果:ABDECF Python代码示例...