您的位置:首页 > 编程语言 > Python开发

python中的闭包

2016-02-06 21:05 666 查看
闭包

绑定外部变量的函数
返回一个绑定外部变量的内部函数
嵌套函数

内部函数用到了外部变量

外部函数返回内部函数

def pow_x(x):
def echo(value):
x=2
return value ** x
return echo

if __name__=='__main__':
lst = (pow_x(2), pow_x(3), pow_x(4))
for p in lst:
print p(2)
内部变量不能"改变"外部变量

内部函数用到了外部变量为list,则可以从外部或内部改变值,并且即使外部没有引用也不会回收
例子

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'teng'
def pow_y(x):
def echo(value):
x[0] = x[0]*2 # 可以改变值 访问了该值 而不是给予
# x=[2,2]
return value ** x[0], value**x[1]
return echo

if __name__ == '__main__':
lst2 = pow_y([1, 1])
print "closure powy", lst2(2)
print "closure powy", lst2(3)
print "closure powy", lst2(4)
一个关于闭包的应用

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'teng'

origin = [0, 0]
legal_x = [0, 50]
legal_y = [0, 50]

def create(pos):
def player(direction, step):
new_x = pos[0]+direction[0]*step
new_y = pos[1]+direction[1]*step
pos[0] = new_x
pos[1] = new_y
return pos
return player

player1 = create(origin[:])
print player1([1, 0], 10)
print player1([0, 1], 20)
print player1([-1, 0], 10)
print "orgin is", origin

print "origin is",origin

player2 = create(origin[:])
print player2([-1,0],10)
print player2([1,1],20)
print player2([1,0],10)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  fp