首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python中全局变量()和局部变量()的奇怪行为

在Python中,全局变量和局部变量是两种不同的变量作用域。全局变量是在整个程序中都可访问的变量,而局部变量只在特定的代码块或函数中可访问。

奇怪行为:

在Python中,当全局变量和局部变量同名时,会出现一些奇怪的行为。具体来说,当在一个函数内部使用同名变量时,Python会将其视为局部变量,而不是全局变量。这意味着在函数内部对该变量的修改不会影响到全局变量的值。

示例代码:

代码语言:python
复制
x = 10  # 全局变量

def func():
    x = 20  # 局部变量
    print("局部变量 x =", x)

func()
print("全局变量 x =", x)

输出结果:

代码语言:txt
复制
局部变量 x = 20
全局变量 x = 10

在上述代码中,我们定义了一个全局变量x,并在函数func()内部定义了一个同名的局部变量x。当我们在函数内部打印局部变量x时,输出的值为20。然而,在函数外部打印全局变量x时,输出的值为10,没有受到函数内部的修改影响。

这种奇怪的行为是因为Python在函数内部会创建一个新的局部命名空间,用于存储函数内部的变量。当函数内部存在同名变量时,Python会优先使用局部变量,而不是全局变量。

为了在函数内部修改全局变量的值,我们可以使用global关键字来声明变量为全局变量。示例代码如下:

代码语言:python
复制
x = 10  # 全局变量

def func():
    global x  # 声明x为全局变量
    x = 20  # 修改全局变量的值
    print("全局变量 x =", x)

func()
print("全局变量 x =", x)

输出结果:

代码语言:txt
复制
全局变量 x = 20
全局变量 x = 20

在上述代码中,我们使用global关键字声明了变量x为全局变量,并在函数内部修改了其值。当我们在函数内部和外部打印全局变量x时,输出的值都为20,说明全局变量的值已经被成功修改。

总结:

Python中的全局变量和局部变量有不同的作用域。当在函数内部使用同名变量时,Python会将其视为局部变量,而不是全局变量。为了在函数内部修改全局变量的值,可以使用global关键字声明变量为全局变量。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

python全局变量局部变量详解

参考链接: Python全局变量 写在最前面:  python全局变量局部变量最大区别在于局部变量只能通过函数去访问,而全局变量可以直接访问。  !!! ...我们先来看一个最简单例子,事实上这并不是一个真正全局变量,只是在类一个变量。  !!!  我们先从类变量访问开始讲起  那么我们要如何访问这个变量呢? ...,实例化时候必须给参数,由于python是动态语言,不需要指定参数类型,你可以放int,比如1,也可以给一个字符串。  ...()  我是真正全局变量 我一直都是局部变量 当我们试图在函数外访问这个函数局部变量时  a = '我是真正全局变量' def showvariable():     b = '我一直都是局部变量...那么不巧是,我局部变量全局变量定义了同一个名称,谁优先级更高呢?

48400

学习记录-Python局部变量全局变量

运行后显示,egg未被定义egg是局部变量,而print(egg)变量egg是全局变量,全局作用域中代码不能使用局部作用域中变量这一点我理解为:在调用子函数spam()时,创建了一个局部作用域,...并在局部作用域中定义了一个局部变量,当子函数调用结束后,局部作用域内部定义局部变量一起没销毁,因此在全局作用域中,找不到egg这个局部变量2.2 局部作用域中代码可以访问全局变量 def spam...两个子函数中都定义了变量egg,但在打印时,互不影响3 全局变量局部变量同名在上面说到,可以在局部作用域中调用全局变量,并且在给出例子,我们子函数只有一个print操作,但如果一个变量既在全局作用域中定义...通过使用global语句在局部作用域中声明了一个全局变量egg,当函数spam()调用结束后变量egg并未随之销毁5 全局变量局部变量优先级在上面的例子说过,如果在全局变量局部变量同名,那么局部作用域中会优先处理在当前作用域中声明变量用下面的例子进一步说明这个问题...报错显示局部变量在赋值前被引用,就像前面所说,当在局部作用域中处理一个变量时,Python会先查看这个变量是否在局部作用域中进行声明,然后在会在全局作用域中查找这个变量声明参考内容《Python编程快速上手

65520

python全局变量局部变量详解

写在最前面: python全局变量局部变量最大区别在于局部变量只能通过函数去访问,而全局变量可以直接访问。 !!!...我们先来看一个最简单例子,事实上这并不是一个真正全局变量,只是在类一个变量。 !!! 我们先从类变量访问开始讲起 那么我们要如何访问这个变量呢?...,实例化时候必须给参数,由于python是动态语言,不需要指定参数类型,你可以放int,比如1,也可以给一个字符串。...showvariable()     我是真正全局变量     我一直都是局部变量 当我们试图在函数外访问这个函数局部变量时 a = '我是真正全局变量' def...那么不巧是,我局部变量全局变量定义了同一个名称,谁优先级更高呢?

42020

python全局变量-局部变量用法区别

对于很多初学同学,对全局和局部变量容易混淆,看看下面给大家讲解相信都应该明白 两者区别了。...定义: 全局变量:在模块内、在所有函数外面、在class外面 局部变量:在函数内、在class方法内 下面来看看例子 函数内部调用全局变量 a="hello"  #全局变量a def test():...运行后都是全局变量值hello 函数内部使用与全局变量同名局部变量 a="hello"  #全局变量a def test(): a="hell0 local" #定义了一个局部变量a b =a    ...注:在方法内部变量是在=号前面的,那肯定是局部变量。...如果是第一次出现在=号后 面的,那肯定是调用全局变量全局变量可以在函数里面调用,局部变量只能在对应函 数里面调用,在该函数外面任何地方都无法被调用。

58310

6.python 局部变量全局变量

python开发,变量也是有生命周期,一旦周期结束,程序会自动清理暂用空间,释放内存,变量分为两者,一种是局部变量,一种是全局变量,两者具体有什么区别呢…… ?...一.局部变量 一般而言在函数内部或者类声明变量默认都是局部变量。一旦函数结束,变量生命周期也会结束,占用空间会被自动释放。...(a) 输出结果: 2 2 三.局部变量全局变量区别 1.全局变量生命周期是直到程序结束,而局部变量生命周期是函数结束; 2.如果需要在函数内部修改全局变量值,需要在函数内部为该全局变量前面加上...四.重点总结 1.注意局部变量全局变量生命周期; 2.如果想在函数内部修改全局变量值,需要加上关键字global; 猜你喜欢: 1.python变量 2.pycharm设置头文件模板 转载请注明...:猿说Python » python局部变量全局变量

1.3K20

【从零学习python 】28. Python局部变量全局变量

全局变量能够在所有的函数中进行访问 全局变量局部变量名字相同问题 看如下代码: 总结2: 当函数内出现局部变量全局变量相同名字时,函数内部 变量名 = 数据 此时理解为定义了一个局部变量,而不是修改全局变量值...change_global_variable() print(a) # 输出200 总结3: 如果在函数中出现global 全局变量名字 那么这个函数即使出现全局变量名相同变量名 = 数据 也理解为对全局变量进行修改...,而不是定义局部变量 如果在一个函数需要对多个全局变量进行修改,那么可以一次性全部声明,也可以分开声明。...# 可以使用一次global对多个全局变量进行声明 global a, b # 还可以用多次global声明都是可以 # global a # global b 查看所有的全局变量局部变量 Python...提供了两个内置函数globals()locals()可以用来查看所有的全局变量局部变量

14210

java局部变量全局变量_java全局变量局部变量

成员变量和局部变量区别   上面两部分代码区别是上面代码,变量 a 是作为类成员变量,主方法创建了对象,我们发现此时 a 结果是 0,如果我们换成字符串就是 null ,boolean型变量默认就是...而下面部分代码则是方法变量,也就是局部变量。我们直接打印它或者用到它时候直接会报错。   如何解释这一现象?局部变量必须赋初始值?下面我们多方面分析一下。  ...首先,Java语言是这么明文规定局部变量使用前必须赋值。为什么Java 语言要这么规定呢。我们知道Java 是一门面向对象语言,它将重点放在 数据 对象接口上。...我们还可以换个角度来想这个问题,假如你是开发 Java 这门伟大语言开发者,你在设计时候,类成员变量是要在堆中分配内存,方法局部变量是在栈。...其实正是因为成员变量属于对象,而对象是保存在堆,随着类加载在为对象开辟空间时候自动为成员变量赋初值,如果我们还要给局部变量都赋初值,那性能影响太大了吧,开发者想到这里时候可能就直接将给局部变量初始化想法抹杀掉了吧

1.7K20

python基础之函数局部变量全局变量

---- 一、背景   实际开发过程,经常会遇到很多完全相同或者非常相似的操作,这时,可以将实现类似操作代码封装为函数,然后在需要地方调用该函数。...这样不仅可以实现代码复用,还可以使代码更有条理性,增加代码可靠性。下面我们来介绍一下python函数局部变量全局变量相关内容。...---- 二、局部变量全局变量 1、局部变量   所谓局部变量,指的是定义在函数内变量,只能在函数内使用,它与函数外具有相同名称其他变量没有任何关系。...不同函数,可以使用相同名字局部变量,它们代表不同对象,互不干扰。此外,函数形式参数也属于局部变量,作用范围仅限于函数内部。...在这里插入图片描述 三、参考 1、廖雪峰官网 2、python官网 3、Python编程案例教程 ---- 四、总结   以上就是就是关于Python函数局部变量全局变量相关知识,可以参考一下,觉得不错的话

54750

java局部变量全局变量哪个优先_java成员变量是全局变量

大家好,又见面了,我是你们朋友全栈君。 Java变量 java主要有如下几种类型变量: 一、局部变量 只在特定过程或函数可以访问变量,被称为局部变量。...与局部变量相对应,是全局变量全局变量就是从定义位置起,作用域覆盖整个程序范围变量。 局部变量可以全局变量重名,但是局部变量会屏蔽全局变量。...在函数内引用这个变量时,会用到同名局部变量,而不会用到全局变量。 一旦退出方法,构造函数或块变量将被销毁。 访问修饰符不能用于局部变量。...局部变量在堆栈级别内部实现。 局部变量要先赋值,再进行运算,而实例变量均已经赋初值。...(这是局部变量实例变量一大区别) 二、全局变量(成员变量) 其中实例变量、类变量、常量都是属于成员变量,成员变量又被称为全局变量 java类成员变量有俩种:一种是被static

1.2K20

局部变量,静态局部变量全局变量,静态全局变量在内存存放区别(转)

4、全局/静态存储区,全局变量和静态变量被分配到同一块内存,在以前c语言中,全局变量又分为初始化未初始化,在c++里面没有这个区分了,他们共同占用同一块内存区。  ...段起始位置也是由连接定位文件所确定,大小在编译连接时自动分配,它和你程序大小没有关系,但程序使用到全局变量,常量数量相关。  4、stack保存函数局部变量参数。...:  研究这个意义不大,不同编译器,可能行为不同,如果是vc的话,基本上如下:  1、代码区,是编译器生成一个exe区段,拥有可读可执行属性,但是实际上如果不开dep数据执行保护,所有的区段都是可执行...局部变量,局部静态变量,全局变量,全局静态变量区别: 局部变量:    栈区 局部静态变量:静态区 全局变量:    静态区常量区 全局静态变量:静态区 在进行C/C++编程时,需要程序员对内存了解比较精准...,然后是函数局部变量

3.8K80

关于python全局变量局部变量一个问题

参考链接: Python全局,局部局部变量 众所周知,全局变量局部变量可以说是泾渭分明,如 a = 10 def test(): a = 20 print(a) test() #将输出局部变量a...print(a) # 将输出全局变量a #答案是: 20 10 函数内部局部变量a,并不会影响全局变量a 但是假设为列表或字典呢?...my_list) 答案为:函数 [20] [10] 仍然符合局部变量并不会影响全局变量 注意:假设为一个空列表或字典 my_list = [] def list_test(): my_list.append...(20) print(‘函数’,my_list) list_test() print(my_list) 答案:函数 [20] [20] 这里为何是20,而不是[]?...个人见解:函数内部无my_list这个列表,因此他将会调用全局变量my_list列表,然后把元素放在了列表,改变全局变量,又或是因为是容器? 望大佬们积极解惑,不胜感激

64920

PYTHON】论Python私有变量、共有变量、全局变量局部变量

参考链接: Python私有变量 0 引言  Python语言中,一切皆对象。对于Python语言中变量,我想大家都不陌生,但是在Python,变量也有很多种类。...如私有变量、共有变量、全局变量局部变量等。这里给大家介绍Python类(class)变量之间区别。...,而在__init__()构造方法long变量也是可以被对象f直接引用,这就是说全局变量是被当做类一个属性来存放,在Python。    ...我们可以通过这种方式对其进行访问,实例如下:  1.2 局部变量  局部变量,是指该变量生命周期不会程序全部生命周期同步生存或者死亡。...上面的截图中,在类run()方法定义r变量是一个局部变量,我们根本不可能调用它,因为它在run()方法运行完毕之后,属于它局部变量r)那一块内存空间就会被Python解释器给释放掉,所以Python

4.1K20

CCPPstatic用法:全局变量局部变量

C/C++ static 用法全局变量局部变量 什么是static?  static 是C/C++很常用修饰符,它被用来控制变量存储方式可见性。...1.2静态数据存储 全局(静态)存储区:分为DATA段BSS段。DATA段(全局初始化区)存放初始化全局变量和静态变量;BSS段(全局未初始化区)存放未初始化全局变量和静态变量。...在C/C++static作用 2.1总的来说: (1)生命周期:在修饰变量时候,static修饰静态局部变量只执行初始化一次,而且延长了局部变量生命周期,直到程序运行结束以后才释放,但不改变作用域...静态变量与普通变量 静态全局变量有以下特点: (1)静态变量都在全局数据区分配内存,包括后面将要提到静态局部变量; (2)未经初始化静态全局变量会被程序自动初始化为0(在函数体内声明自动变量值是随机...(4)全局变量全局静态变量区别 1)全局变量是不显式用static修饰全局变量全局变量默认是有外部链接性,作用域是整个工程,在一个文件内定义全局变量,在另一个文件,通过extern 全局变量声明

1.4K20

python全局变量局部变量、类变量、实例变量简析

参考链接: Python全局变量局部变量 因为python为动态语言,处理变量方式与一些静态语言(比如C++)不大一样,在这里对这些变量进行小小总结  python全局变量与C语言中类似,也就是在那个单页面所有函数外头定义变量...  局部变量为函数内定义变量,函数执行完后会被回收  实例变量是类前面有self变量,每个实例变量都不同  类变量是所有实例共享一个变量,所有实例占同一个内存  来看个程序就懂了! ...>>> big_temp = '123456788'  # 全局变量 >>> class Test:     global_temp = '123'     # 类变量     def __init__...(self):         self.temp = '321'   # 实例变量         mytemp = '345'      # 局部变量     def print_something

1.7K00

关于Python局部变量全局变量必须知道几句话

虽然Python支持非常复杂变量作用域访问顺序(详见:几行代码理解Python变量访问LEGB顺序、详解Python变量作用域),但是一般而言,能够分清局部变量全局变量基本上就够用了。...1、一个变量作用域是指能够访问它代码范围。 2、函数形参变量作用域是整个函数。 3、在函数定义变量被称作(隐式局部变量。...如果局部变量是在一个代码块定义,那么它从定义位置开始到其所在函数结束代码中都是可以访问,并且在整个函数范围内,该变量都是局部变量,除非在函数开始使用global关键字进行声明。...4、函数内部for语句中循环变量是(隐式局部变量其他局部变量一样,它作用域会被延伸到其所在函数结束,除非之前有global声明。 5、Python支持全局变量:函数之外定义变量。...全局变量对于其定义位置之后定义所有函数都是可见、可读。然而,任何想修改全局变量函数都必须包含一个global声明。 6、应尽量避免使用全局变量

73850

Python全局变量操作

http://blog.csdn.net/vipygd/article/details/7797778 接触Python时间不长,对有些知识点,掌握不是很扎实,我个人比较崇尚不管学习什么东西,首先一定回去把基础打的非常扎实了...今天遇到了Python全局变量相关操作,遇到了问题,所以,在这里将自己遇到问题,做个记录,以长记心!!!...在Python中使用全局变量,其实,个人认为并不是很明智选择;但是自己还是坚信,存在便合理,在于你怎么使用;全局变量降低了模块函数之间通用性;所以,在以后编程过程,应尽量避免使用全局变量。...全局变量使用: 方法一: 为了便于代码管理,将全局变量统一放到一个模块,然后在使用全局变量时候,导入全局变量模块,通过这种方法来进行使用全局变量; 在一个模块定义全局变量: [python...但是在使用全局变量时候,必须在函数中使用global关键字进行标识: [python] view plaincopyprint?

3.1K20
领券