小甲鱼《零基础学习Python》课后笔记(二十)

首次使用makedown进行博客书写,使用起来感觉也不难,主要是功能需要比较少,不过编写出来的文章很美观。
测试题
0.如果希望在函数中修改全局变量的值,应该使用什么关键字?
使用global关键字。使用global关键字使函数内的局部变量修改为全局变量。

    >>> number = 1  
    >>> def fun1():  
        number = 3  
        print(number)  


    >>> fun1()  
    3  
    >>> print(number)  
    1  
    >>> def fun1():  
        global number  
        number = 3  
        print(number)  


    >>> fun1()  
    3  
    >>> print(number)  
    3  


1.在嵌套的函数中,如果希望在内部函数修改外部函数的局部变量,应该使用什么关键字?

使用nonocal关键字。

    >>> def outside():  
        number = 4  
        def inside():  
            nonlocal number  
            number *= number  
            return number  
        return inside()  

    >>> outside()  
    16  


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

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

    inside()  

函数嵌套中,内部函数只能在外部函数的范围内调用,改为:

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

        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()  

因为代码B中var没有定义就使用print打印var,外层函数的var变量内层函数不能访问。

4.请问如何访问funIn()呢?

    def funOut():  
        def funIn():  
            print('宾果!你成功访问到我啦')  
        return funIn()  

直接调用funOut函数即可:

    >>> funOut()  
    宾果!你成功访问到我啦  


5.请问如何访问funIn()呢?

    def funOut():  
        def funIn():  
            print('宾果!你成功访问到我啦')  
        return funIn  

得加一个小括号:

    >>> print(funOut())  
    <function funOut.<locals>.funIn at 0x0000021DADD9E9D8>  
    >>> type(funOut())  
    <class 'function'>  
    >>> funOut()()  
    宾果!你成功访问到我啦  

我觉得funOut函数返回的funIn类似C语言中的函数名,是一个地址。

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。只要认为funX()函数返回的是funY()的地址就能理解了,a()只不过是调用funY()。

猜你喜欢

转载自blog.csdn.net/qq_24546137/article/details/81430869