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就没有被重新初始化。
    所以当全局变量不适用的时候,可以考虑使用闭包更稳定和安全,你还可以参考 -> 游戏中的角色移动:闭包在实际开发中的作用 




  • 相关阅读:
    Android Studio 开发
    Jsp编写的页面如何适应手机浏览器页面
    电影
    Oracle 拆分列为多行 Splitting string into multiple rows in Oracle
    sql server 2008 自动备份
    WINGIDE 激活失败
    python安装 错误 “User installations are disabled via policy on the machine”
    ble编程-外设发送数据到中心
    iOS开发-NSString去掉所有换行及空格
    ios9 字符串与UTF-8 互相转换
  • 原文地址:https://www.cnblogs.com/jieperhaps/p/9023265.html
Copyright © 2011-2022 走看看