解析python的局部变量和全局变量
作者:三国小梦 发布时间:2023-08-23 18:17:01
局部变量
什么是局部变量
通俗定义:函数内部定义的变量就叫局部变量。
话不多说,代码如下:
def test1():
a = 300 # 定义一个局部变量a,并初始化300
print("--test1--修改前:a=%s" % a)
a = 200 # 给变量a重新赋值200
print("--test1--修改后:a=%s" % a)
def test2():
a = 400 # 定义另一个局部变量a,并初始化400
print("--test2--修改后:a=%s" % a)
# 分别调用函数test1,test2
test1()
test2()
输出:
--test1--修改前:a=300
--test1--修改后:a=200
--test2--修改后:a=400
结论:
局部变量就是在函数内部定义的变量。
不同的函数内部可以定义名字相同的变量,但它们不会产生影响。
局部变量的作用,为了临时保存数据需要在需要在函数中定义变量来进行存储。
全局变量
什么是全局变量
定义:如果一个变量既能在一个函数中使用,也可以在其他函数中使用,这样的变量就是全局变量。
代码如下:
a = 100 # 定义一个全局变量a,并初始化为100
# 分别定义函数test1、test2,功能是打印变量a的值
def test1():
print(a)
def test2():
print(a)
test1()
test2()
"""
结果如下:
100
100
"""
如何修改全局变量的值
首先,我们可能是这样想的:
a = 100 # 定义一个全局变量a,并初始化为100
# 分别定义函数test1、test2
def test1():
print("修改前:a=%s"%a)
a = 300
print("修改后:a=%s"%a)
def test2():
print(2)
test1()
test2()
"""
结果如下:
UnboundLocalError: local variable 'a' referenced before assignment
异常解释:局部变量a在被引用前没有被定义
"""
那我们把函数test1中的内容修改如下:
def test1():
# print("修改前:a=%s"%a)
a = 300
print("修改后:a=%s"%a)
"""
结果如下:
修改后:a=300
100
"""
这次我们发现,错误消失了,函数test2中打印变量a的值并没有改变还是100,这是为什么呢?
原因:如果一个全局变量在函数内被重新定义过,再在函数内使用变量则默认为局部变量;如果在函数内没有被定义,直接使用会被视为全局变量。
此时,函数test1中的只是定义了一个名字相同的局部变量而已,并没有改变全局变量的值。
global的使用
这前我们想的法子都不能修改全局变量的值,这下就该认识一个新的关键字 global ,它的功能就是如果需要在函数内定义(修改)全局变量,则要先用global进行声明。
把之前的代码修改如下:
a = 100 # 定义一个全局变量a,并初始化为100
# 分别定义函数test1、test2
def test1():
global a # 声明函数中使用的a是全局变量
print("修改前:a=%s" % a)
a = 300
print("修改后:a=%s" % a)
def test2():
print(2)
test1()
test2()
"""
结果如下:
修改前:a=100
修改后:a=300
300
"""
这下终于修改成功了。
可变类型与不可变类型的全局变量
发现我们之前定义的全局变量是数字类型,是属于不可变类型的,那么修改一个可变类型的全局变量有什么不同呢?
a = [100, 200] # 定义一个列表全局变量a
# 分别定义函数test1、test2
def test1():
print("修改前:a=%s" % a)
a.append(300)
print("修改后:a=%s" % a)
def test2():
print(a)
test1()
test2()
"""
结果如下:
修改前:a=[100, 200]
修改后:a=[100, 200, 300]
[100, 200, 300]
"""
我们发现当全局变量为可变类型时,即使我们不是用global关键字声明全局变量,它还是会被修改。
事实上:
在函数中不是用global声明全局变量时不能修改全局变量的本质是不能修改全局变量的指向,即不能将全局变量指向新的数据。
对于不可变类型的全局变量来说,因其指向的数据不能被修改,所以不是用global时无法修改全局变量。
对于可变类型的全局变量来说,因其指向的数据可以改变,所以不用global时可以修改全局变量。
总结
以上所述是小编给大家介绍的python的局部变量和全局变量,网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
来源:https://www.cnblogs.com/lxy0/p/11356029.html


猜你喜欢
- 本文实例讲述了Python udp网络程序实现发送、接收数据功能。分享给大家供大家参考,具体如下:1. udp网络程序-发送数据创建一个基于
- 本文实例讲述了GO语言映射(Map)用法。分享给大家供大家参考。具体如下:映射是一种内置的数据结构,用来保存键值对的无序集合。(1)映射的创
- 最近在做一个游戏数据统计后台,最基础的功能是通过分析注册登录日志来展示用户数据。在公司内部测试,用户量很少,所以就没有发现什么性能问题。但是
- 很多时候,我们执行页面上某个URL请求的时候,需要有等待的时间。如果是直接的页面跳转,浏览器会有缓冲进度展示,但是如果是AJAX,我觉得应该
- 引言如果你不确定TypeScript是什么,它基本上是一种建立在JavaScript之上的类型化语言。所有的JavaScript都是有效的T
- 来看看javascript怎么实现自动点击超级链接吧,主要使用了js中的onclick事件。这里推荐大家看看这篇文章js鼠标事件大全。看了这
- cv的xdm可以直接翻到 需求 和 代码 用,想看中间的分析就老实往下看吧little 背景最近在做毕设,需要将几百篇整体结构差不多的文章中
- 1、何为ansible-playbookplaybook是ansible用于配置,部署,和管理被控节点的剧本,通过playbook的详细描述
- 需要实现的效果是: 固定放大两倍,鼠标进入到左侧图片区域的时候,遮罩层显示,离开时,遮罩层隐藏。 css中的cursorhttps
- 前记在Python3.7后官方库出现了contextvars模块, 它的主要功能就是可以为多线程以及asyncio生态添加上下文功能,即使程
- 说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table
- 错误代码如下:NotFoundError (see above for traceback): Unsuccessful TensorSli
- 前言今天给大家分享一下刷到的关于数值处理的算法题。虽然题目比较简单但是问题的处理方式值得我们学习。小学生算术涉及到加法进位、阶乘精确值用于计
- 本文实例讲述了python基于pygame实现响应游戏中事件的方法。分享给大家供大家参考,具体如下:先看一下我做的demo效果:当玩家按下键
- SQL Server对上亿的表进行排序或者上亿的表之间进行join,会导致系统失去响应。◆1.我确实做了一个很大的查询,涉及的数据表有两亿条
- 在CSS中我们会经常要用到“清除浮动”Clear,比较典型的就是clear:both;CSS手册上是这样说明的:该属性的值指出了不允许有浮动
- 本文实例为大家分享了python3实现ftp服务功能的具体代码,供大家参考,具体内容如下功能介绍:可执行的命令:lspwdcd put rm
- 一、前言上次写了一个俄罗斯方块,感觉好像大家都看懂了,这次就更新一个植物大战僵尸吧二、引入模块import pygameimport ran
- 一、导包案例我们导入第三方库,可以使用import。那我们现在有一个需求,我需要动态输入一个模块名,然后导入,这应该怎么做呢?#!/usr/
- 一、在访客的内心深处做导航我讨厌迷失,不管是在道路上或是在线网络上。猜想一下?您的访客也是这样的。就像我们期望看到的道路上的路标一样,来帮助