导语
  在子程序定义的变量被称为是局部变量,在程序一开始定义的变量被称为是全局变量。全局变量的作用域是整个程序的生命周期,而局部变量的作用域知识在其定义的范围内可以使用。当全局变量与局部变量出现重名的时候,在局部变量的范围内是局部变量起作用,而在其他地方使用会是全局变量起作用。

文章目录

  • 全局变量和局部变量
    • 全局变量
    • global 关键字
    • 局部变量
    • 局部变量和全局变量的使用
    • 变量之间的关系
    • 规范
    • 补充内容
  • 总结

全局变量和局部变量

全局变量

  全局变量被定义之后,在整个代码中都可以使用到如下

name = "nihui"def chang_name():name = 'test'print('chang_name',name)chang_name();
print(name)

  在定义全局变量与局部变量重名的时候,局部变量使用局部变量传入的值,而回到全局之后使用的还是全局变量的值。

global 关键字

  使用了global关键字,相当于在局部变量中直接使用了全局变量。在内存中不会开辟新的空间,直接使用全局变量。

name = "nihui"# def chang_name():
#     name = 'test'
#     print('chang_name',name)def chang_name():global namename = "我真帅"print("我的长相",name)
chang_name();
print(name)

  下面就来看一下Global关键字如何使用

局部变量

NAME = "admin"def admin():NAME = "nihui"print(NAME)def test():NAME = "user"print(NAME)admin()
test()

从上面的代码输入结果可以看出

nihui
user

局部变量和全局变量的使用

  在Python执行的时候会先进行编译,也就是在运行之前先执行编译,但是在编译的时候两个方法中的内容并没有被执行,但是在具体调用方法的时候进行执行。下面来看一下如下的代码。

NAME = "admin"def admin():# NAME = "nihui"global NAMEprint(NAME)def test():NAME = "user"print(NAME)admin()
test()
NAME = "admin"def admin():# NAME = "nihui"global NAMENAME = "lisi"print(NAME)def test():NAME = "user"print(NAME)admin()
test()
NAME = "admin"def admin():# NAME = "nihui"global NAMENAME = "lisi"print(NAME)def test():# NAME = "user"print(NAME)admin()
test()
NAME = "admin"def admin():# NAME = "nihui"global NAMENAME = "lisi"print(NAME)def test():# NAME = "user"print(NAME)test()
admin()

  上面几个例子中可以看出,不同的代码执行顺序会有不同的结果,为什么会有这样的效果呢?这就是因为global关键字的影响,它不会创建新的变量,如果在使用的时候进行了更新操作,它并不会产生新的变量。而是将整个的全局变量改变了。

变量之间的关系

  如果函数的内部五global关键字,只能读取全局变量,无法重新赋值。如果函数中有global关键字,变量本质上就是全局的那个变量,可读取可赋值。通过下面两个例子可以证明一下上面这个结论。

NAME = ["admin","zhangsan"]
def admin():# NAME = "nihui"global NAMENAME = "lisi"print(NAME)def test():NAME = "user"print(NAME)
admin()
test()
NAME = ["admin","zhangsan"]def admin():# NAME = "nihui"NAME = "lisi"print(NAME)def test():# NAME = "user"print(NAME)admin()
test()

注意
  从上面的结果中可以看到如果是个列表也是满足上面结论的。但是如果出现如下的这种操作。也就是说遇到可变对象的时候可以对其内部元素进行操作。


NAME = ["admin","zhangsan"]def admin():# NAME = "nihui"NAME = "lisi"print(NAME)def test():# NAME = "user"NAME.append("wangwu")print(NAME)admin()
test()

规范

全局变量全部大写,局部变量全部小写。

补充内容

NAME = "admin"def nihui():name = "nihui"print(name)def test():name = "test"print(name)def user():name = "user"print(name)print(name)user()test()print(name)
nihui()

name = "nihui"def admin():name = '沉着'def test():global namename = "冷静"test()print(name)
print(name)
admin()
print(name)

总结

  上面内容简单的描述了全局变量和局部变量的使用,以及关键字global的用法,主要记住一句话,全局变量用大写,局部变量用小写。

Python精通-Python局部变量与全局变量的区别相关推荐

  1. 静态局部变量和全局变量的区别!

    静态局部变量和全局变量的区别! C++变量根据定义位置的不同,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名作用域和文件作用域. 1.从作用域看: (1)全局变 ...

  2. 、简述global关键字的作用_二十三、Python变量作用域(局部变量和全局变量)

    变量的作用域 在Python中,变量的作用域指的是变量起作用的范围,不同的作用域内,虽然变量的名字相同,但是它们互不影响.变量按照作用域范围可分为局部变量和全局变量. 全局变量 全局变量是在函数定义和 ...

  3. Python精通-Python学习路线详细介绍

    导语   自从上次说完Python学习路线之后就再也没有更新过关于Python的东西,那么从这篇博客开始将对整个的Python技术栈开启以场全面的旅途,更其他系列一样,博主会不定期的更新关于Pytho ...

  4. php局部变量和全局变量的区别,PHP局部变量、静态变量、全局变量和超全局变量的使用和区别...

    首先,PHP 中从变量的范围上可以分为 4 类,分别是静态变量.局部变量.全局变量和超全局变量. PHP 局部变量与全局变量 在 PHP 中中全局变量和局部变量的定义是和 C 语言类似的.在函数外定义 ...

  5. Python入门:局部变量与全局变量2

    例子1: names=("Lili","Rain","Jack") change_name(name): names[0]="Li ...

  6. Python精通-Python集合操作详解

    导语   在前面的分享中说完了基本的数据类型,基本的数据类型有六种分别是数字.字符串.列表.元组.列表.以及布尔值.接下来说的就是在Python中比基本数据类型变量等知识更加深入的数据类型叫做集合 文 ...

  7. Python精通-Python列表操作

    导语   在之前的关于Python的分享中对于基本数据类型中字符串.布尔值等做了详细的分享.接下来的内容就是在Python中的另一个比较重要的基本数据类型列表,关于列表在之前对于字符串进行切分的时候简 ...

  8. Python精通-Python入门基础

    导语   入坑Python系列开始了 文章目录 Python入门程序 Python程序运行方式 Python代码分析 执行一个操作内容 变量 条件语句 基本数据类型 字符串 数字 基本运算 加法 减法 ...

  9. Python精通-Python函数使用

    导语   在编程意义上的函数其实是指完成某种操作的代码块,当然这个是个人的理解,但是这个概念在所有的编程语言中都是通用的.这个代码块用来完成某写特定的操作.但是在数学上的函数却是表示某种对应关系,这两 ...

最新文章

  1. golang异步协程调度原理
  2. su 与 sudo 区别
  3. JQUERY 常用方法汇总
  4. ping发送超大数据包(高级用法)
  5. list java removeif_java – removeIf()方法.从List中删除所有元素
  6. atlas安装需要kafka吗_Atlas 2.1.0 实践(2)—— 安装Atlas
  7. MySQL对于有大量重复数据表的处理方法
  8. Docker Java程序镜像制作
  9. 反射进行.newInstance()方法,报错Caused by: java.lang.NoSuchMethodException:XXXX.<init>()
  10. 详细关闭iiop方法_安卓手机卡顿清理垃圾是没用的,教你关闭几个设置,告别手机迟钝...
  11. 100大产业链全景图(2020版)及智能制造50大产业链
  12. 暑假集训后的一些感想
  13. android 第三方SDK接入一般流程
  14. jquery 国际短信区号 鼠标移上实现下拉选择
  15. 语音唤醒真香警告,轻松开启与Siri、小度和小爱的畅聊
  16. 真的有这么丝滑:3D头发建模新方法NeuralHDHair,浙大、ETH Zurich、CityU联合出品...
  17. 基于ZigBee+ESP32+MQTT+EMQX+TomCat+Servlet接口+MySQL+安卓app的物联网课设
  18. python携程酒店评论_python爬取携程景点评论信息
  19. 22考研基础阶段计划;超七成考研人已开始复习!
  20. 001、JDK环境配置

热门文章

  1. win10用计算机分区,新电脑win10怎样给系统硬盘分区?给新win10电脑分区硬盘的方法...
  2. matlab 03d,randomforest-matlab 一个 实现 的源代码,里面有使用说明和范例 Data Mining 数据挖掘 242万源代码下载- www.pudn.com...
  3. linux 减小根分区大小_减小linux下根分区
  4. python清除输出内容_jupyter notebook清除输出方式
  5. bootstrap和圣杯布局
  6. 64.判断当前线程是否是主线程
  7. android 关于listview scrollview 底部 控件无法显示的两个解决方案
  8. Spring -Bean的作用域
  9. 皕杰报表和炎黄盈动(AWS BPM)集成 操作手册
  10. 脚本语言(确认补遗)