zoukankan      html  css  js  c++  java
  • 123

    在python开发中,一言不合就来一个变量abc,你可知变量也是有生命周期的?一旦周期结束,程序会自动清理暂用的空间,释放内存;

    变量分为两者,一种是局部变量,一种是全局变量,两者具体有什么区别呢……

    局部变量

    一般而言在函数内部或者类中声明的变量默认都是局部变量。一旦函数结束,变量的生命周期也会结束,占用的空间会被自动释放

    def func1():
    # 在函数内部定义的变量默认都是局部变量
    a = 1
    print(a)
    # 函数结束,局部变量a的生命周期结束

    # 由于a是局部变量,并且a的生命周期已经结束,外部再次调用局部变量a,程序会产生异常,崩溃
    print(a)

    程序报错:NameError: name ‘a’ is not defined ,原因:函数内部定义的局部变量只能在函数内部使用

    全局变量

    全局变量和局部变量相反,在函数外部或者类外部声明的变量默认为全局变量。全局变量的生命周期直到程序结束才会结束,比局部变量生命周期更长

    a = 2
    def func1():
    print(a)
    # 函数结束,局部变量的生命周期结束
    # 全局变量直到程序结束,生命周期才结束

    func1()
    # 输出全局变量a
    print(a)

    输出:

    2
    2

    局部变量和全局变量的区别

    • 全局变量的生命周期是直到程序结束,而局部变量生命周期是函数结束;

    • 如果需要在函数内部修改全局变量的值,需要在函数内部为该全局变量前面加上 global 关键字, 否则该变量默认为函数内部定义的局部变量,示例代码如下:

    # !usr/bin/env python
    # -*- coding:utf-8 _*-

    # 在函数内部定义的变量默认都是局部变量
    a = 2
    def func1():
    # global a # 声明 a 是全局变量,在该函数内部对a的操作就是对全局变量a的操作
    a = 1 # 如果没有上一行代码,默认a就是函数内部的局部变量,函数结束,生命周期结束
    print(a)
    # 函数结束,局部变量的生命周期结束


    func1()
    # 输出全局变量a
    print(a)

    输出结果:

    1
    2

    是不上觉得很奇怪:为什么最后一个值是2,应该是1才对?

    因为没有第17行代码的话,默认 a 只是函数内部的一个普通局部变量,所以函数内部的 print 函数输出到控制台是1;函数结束,函数内部的局部变量 a 值生命周期结束,执行 fun1 函数之后的 print 函数输出的是全局变量a的值2.

    也就是说函数内部对 a 值得修改并没有成功,只有在函数内部,为全局变量加上关键字 global 声明为全局变量,才能修改成功,取消第17行得注释,控制台输出:

     

  • 相关阅读:
    el-select下拉框选项太多导致卡顿,使用下拉框分页来解决
    vue+elementui前端添加数字千位分割
    Failed to check/redeclare auto-delete queue(s)
    周末啦,做几道面试题放松放松吧!
    idea快捷键
    解决flink运行过程中报错Could not allocate enough slots within timeout of 300000 ms to run the job. Please make sure that the cluster has enough resources.
    用.net平台实现websocket server
    MQTT实战3
    Oracle 查看当前用户下库里所有的表、存储过程、触发器、视图
    idea从svn拉取项目不识别svn
  • 原文地址:https://www.cnblogs.com/shuopython/p/12564549.html
Copyright © 2011-2022 走看看