zoukankan      html  css  js  c++  java
  • 小甲鱼Python第十九讲课后习题

    笔记:
    1、内嵌函数:函数内部新创建另一个函数
    2、闭包:函数式编程的重要语法,如果在一个内部函数里,对外部作用域(但不是在全局作用域的变量)进行引用,那么内部函数就会被认为是闭包。
    3、nonlocal:用于声明局部变量
     
    测试题
    0. 如果希望在函数中修改全局变量的值,应该使用什么关键字?
    global 
     
    1. 在嵌套的函数中,如果希望在内部函数修改外部函数的局部变量,应该使用什么关键字?
     nonlocal
     

    2.Python的函数可以嵌套,但要注意访问的作用域问题哦,请问以下代码存在什么问题呢?

    def outside():
    print('I am outside!')
    def inside():
    print('I am inside!')
    inside()

    inside()是内部函数,不能在外部调用
    使用嵌套函数要注意一点就是作用域问题,inside()函数是内嵌在outside()函数中的,所以inside()是人妻,除了身为老公的outside()可以碰(调用),在外边或者别的函数体里是无法对其进行调用的。

    3. 请问为什么代码A没有报错,但代码B却报错了?应该如何修改?
    代码A:
    def outside():
    var = 5
    def inside():
    var = 3
    print(var)
    inside()
    outside()
    代码B:
    def outside():
    var = 5
    def inside():
    print(var)
    var = 3
    inside()
    outside()

    这里outside()函数里有一个var变量,但要注意的是,内嵌函数inside()也有一个同名的变量,Python为了保护变量的作用域,故将outside()的var变量屏蔽起来,因此此时是无法访问到外层的var变量的。
    应该修改为:
    def outside():
    var = 5
    def inside():
    nonlocal var
    print(var)
    var = 8
    inside()
    outside()

    4. 请问如何访问funIn()呢?
    def funOut():
    def funIn():
    print('宾果!你成功访问到我啦!')
    return funIn()

    funOut()

    5. 请问如何访问funIn()呢?
    def funOut():
    def funIn():
    print('宾果!你成功访问到我啦!')
    return funIn

    funOut()()

    6. 以下是“闭包”的一个例子,请你目测下会打印什么内容?
    def funX():
    x = 5
    def funY():
    nonlocal x
    x += 1
    return x
    return funY
    a = funX()
    print(a())
    print(a())
    print(a())

    6
    7
    8
    有些鱼油可能会比较疑惑,这……怎么跟全局变量一样了?局部变量x不是应该在每次调用的时候都重新初始化了吗?!

    其实大家仔细看看就明白了,当a = funX()的时候,只要a变量没有被重新赋值,funX()就没有被释放,也就是说局部变量x就没有被重新初始化。
    所以当全局变量不适用的时候,可以考虑使用闭包更稳定和安全,你还可以参考 -> 游戏中的角色移动:闭包在实际开发中的作用 




  • 相关阅读:
    一个编程的代码网址
    FireFox竟然成功抢注ie7.com域名
    呀!天空软件真的被百度收购了
    呀!天空软件真的被百度收购了
    一个编程的代码网址
    不只MSN会被监听,QQ也一样的
    FireFox竟然成功抢注ie7.com域名
    MS06014网马的一种变形方法
    小马ASP
    Etoile-又一个桌面气象
  • 原文地址:https://www.cnblogs.com/jieperhaps/p/9023265.html
Copyright © 2011-2022 走看看