• Day 10:函数全局变量和局部变量及函数嵌套


    全局变量在所有函数之外赋值的变量,是全局变量

    局部变量在函数内的变量是,局部变量

    一个函数被调用时,就创建了一个局部作用域。在这个函数内赋值的所有变量,
    存在于该局部作用域内。该函数返回时,这个局部作用域就被销毁了,这些变量就
    丢失了。下次调用这个函数,局部变量不会记得该函数上次被调用时它们保存的值。
    作用域很重要,理由如下:

    •  全局作用域中的代码不能使用任何局部变量;
    •  但是,局部作用域可以访问全局变量;
    • 一个函数的局部作用域中的代码,不能使用其他局部作用域中的变量。
    • 如果在不同的作用域中,你可以用相同的名字命名不同的变量。也就是说,可以有一个名为 spam 的局部变量,和一个名为 spam 的全局变量。

    注意:

    1、局部变量不能在全局作用域内使用

    2、局部作用域不能使用其他局部作用域内的变量(不是嵌套)

    3、全局变量可以在局部作用域中读取

    函数嵌套:

     1 a = 1# 全局变量
     2 def func():
     3     print(a)#这a,因函数内部没有变量,使用全局的变量
     4     def func1():
     5         a = 2
     6         print(a)#a,因函数内部有自己的变量,使用自己的变量
     7         def func2():
     8             print(a)#函数内没有自己的变量,使用上一层的变量,如果上一层也没有,继续上一层找。
     9         return func2()
    10     return func1()
    11 print(a)
    12 func()
    13 #输出1,1,2,2。

    4、global , nonlocal 关键字

    global:如果需要在一个函数内修改全局变量,就使用 global 语句。如果在函数的顶部有 global   a 这样的代码,它就告诉 Python,“在这个函数中,a 指的是全局变量,所以不要用这个名字创建一个局部变量。

    nonlocal:内层函数改变外层函数变量用nonlocal, nonlocal不能定义新的外层函数变量,只能改变已有的外层函数变量同时nonlocal不能改变全局变量。

    a = 1# 全局变量
    def func():
        global a #声明我要改变全局变量的 a 了,
        a = 5
        print(a)
        def func1():
            a = 2
            print(a)# 还使用自己的变量
            def func2():
                nonlocal a #  改变上一层的变量
                a = 3
                print(a)
                def func3():
                    print(a)
                return func3()
            return func2()
        return func1()
    print(a)
    func()
    #输出,1,5,2,3,3

    备注:函数变量,如果函数再没有调用的时候,是没用,只是加载。

    人生苦短,我用Python
  • 相关阅读:
    第四节课-反向传播&&神经网络1
    第三节课-损失函数和优化
    Logistic回归python实现
    第二节课-Data-driven approach:KNN和线性分类器分类图片
    在Java项目中部署使用Memcached[转]
    Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍
    Django object filter查询[转]
    Linux查看文件编码格式及文件编码转换<转>
    Django 模板标签[转]
    linux下java unrecognized class file version错误的解决
  • 原文地址:https://www.cnblogs.com/sunjinchao/p/10894881.html
Copyright © 2020-2023  润新知