前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python中的闭包

python中的闭包

作者头像
py3study
发布2020-01-13 11:10:16
7200
发布2020-01-13 11:10:16
举报
文章被收录于专栏:python3python3python3
  • 闭包

绑定外部变量的函数

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

  1. 嵌套函数
  2. 内部函数用到了外部变量
  3. 外部函数返回内部函数
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)
  1. 内部变量不能"改变"外部变量
  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)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档