python语法32[闭包]
来源:互联网 发布:淘宝网护肤品自然堂 编辑:程序博客网 时间:2024/06/03 15:36
一 闭包
来自wiki:
闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。
在一些语言中,在函数中定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。运行时,一旦外部的 函数被执行,一个闭包就形成了,闭包中包含了内部函数的代码,以及所需外部函数中的变量的引用。
闭包的用途:
因为闭包只有在被调用时才执行操作,所以它可以被用来定义控制结构。
多个函数可以使用一个相同的环境,这使得它们可以通过改变那个环境相互交流。
来自baidu百科:
闭包的价值在于可以作为函数对象 或者匿名函数,对于类型系统而言这就意味着不仅要表示数据还要表示代码。支持闭包的多数语言都将函数作为第一级对象,就是说这些函数可以存储到变量中、作为参数传递给其他函数,最重要的是能够被函数动态地创建和返回。
二 python中闭包
实例:
def make_counter():
count = 0
def counter():
nonlocal count
count += 1
return count
return counter
def make_counter_test():
mc = make_counter()
print(mc())
print(mc())
print(mc())
count = 0
def counter():
nonlocal count
count += 1
return count
return counter
def make_counter_test():
mc = make_counter()
print(mc())
print(mc())
print(mc())
三 lamada
实例:
def f(x):
return x**2
print f(4)
g = lambda x : x**2
print g(4)
return x**2
print f(4)
g = lambda x : x**2
print g(4)
Python中的lambda真的没有用武之地吗?其实不是的,至少我能想到的点,主要有:
1. 使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。
2. 对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。
3. 使用lambda在某些时候让代码更容易理解。
参考:
完!
- python语法32[闭包]
- Python函数闭包和语法糖
- Python 语法知识 --函数,闭包
- Groovy语法:闭包
- python语法31[包模块实例]
- python语法31[包模块实例]
- 【Python笔记】Python的几个高级语法概念浅析:lambda表达式 && 闭包 && 装饰器
- swift基础语法--闭包
- Swift语法14.闭包
- Groovy语法之闭包
- Swift闭包表达式语法
- Python每日一练---1.基本语法(导包,输入输出)
- Python中的闭包
- python中的闭包
- python学习~闭包
- python中的闭包
- python闭包详解
- python的闭包
- python翻译[排序高级]
- python类库32[执行外部命令]
- python语法32[global与nonlocal比较]
- python实例32[简单的HttpServer]
- python语法32[装饰器decorator]
- python语法32[闭包]
- python类库32[多线程]
- python类库32[多线程同步Lock+RLock+Semaphore+Event]
- Python转载[编码规范]
- python类库32[多进程]
- python类库32[多进程通信Queue+Pipe+Value+Array]
- python类库32[多进程同步Lock+Semaphore+Event]
- python类库32[多进程共享高级之Manager]
- python类库32[多进程之Pool+Logging]