美文网首页
Python入门与进阶(11-13 11-14 11-15)

Python入门与进阶(11-13 11-14 11-15)

作者: buaishengqi | 来源:发表于2018-05-14 16:41 被阅读4次

11-13 出个题,用闭包解决!
11-14 先用非闭包的方法解决
11-15 再用闭包解决一下_

# 11-13 出个题,用闭包解决!
# 11-14 我先用非闭包解决一下
# 11-15 再用闭包解决一下_

# 计算旅行者所走的步数
origin = 0

def go (step):
    new_pos = origin + step
    origin = new_pos
    return origin

print(go(2))
print(go(3))
print(go(6))
# 上述过程是错误的,结果会报错。将origin = new_pos注释掉,打印的结果,全部是0。想想这个结果为什么不行,错在哪里?

# 怎么改写?会有正确的结果
origin = 0

def go (step):
    global origin#声明一下全局变量
    new_pos = origin + step
    origin = new_pos
    return origin

print(go(2))
print(go(3))
print(go(6))
# 打印结果如图1.正确的结果


# 11-15 再用闭包解决一下_
origin = 0
def factory(pos):
    def go(step):
        nonlocal  pos#声明一下,不是局部变量用nonlocal
        new_pos = pos + step 
        pos = new_pos 
        return new_pos
    return go

tourist = factory(origin)
print(tourist(2))
print(tourist.__closure__[0].cell_contents)#打印看看是不是闭包在起作用
print(tourist(3))
print(tourist.__closure__[0].cell_contents)
print(tourist(6))
print(tourist.__closure__[0].cell_contents)

1.jpg

相关文章

网友评论

      本文标题:Python入门与进阶(11-13 11-14 11-15)

      本文链接:https://www.haomeiwen.com/subject/ugcjdftx.html