前言
学过编程的人应该对全局变量与局部变量这两个名词并不陌生,Python也同多数编程语言一样,也有全局变量与局部变量的概念
但是与其他编程语言又有所不同
全局变量与局部变量两者的本质区别就是在于作用域
用通俗的话来理解的话,
全局变量是在整个py文件中声明,全局范围内都可以访问
局部变量是在某个函数中声明的,只能在该函数中调用它,如果试图在超出范围的地方调用,程序就爆掉了
如果在函数内部定义与某个全局变量一样名称的局部变量,就可能会导致意外的效果,可能不是你期望的。因此不建议这样使用,这样会使得程序很不健全
直接来看几个例子来理解全局变量和局部变量的区别吧:
Demo1:
def fun(x): y=2 print("乘法的运行结果:",x*y) num1=1 print("初始num1=",num1) fun(num1) print("y的值是:",y)
运行结果:
报错的原因是因为试图访问局部变量,但是访问的地方不在该变量y的作用域中
Demo2:
def fun(): num1=2 print("函数内修改后num1=",num1) num1=1 print("初始num1=",num1) fun() print("运行完函数后num1=",num1)
运行结果:
可以看到在函数内部对全局变量的修改后,在函数执行完毕,修改的结果是无效的,全局变量并不会受到影响
再看:
Demo3:
def fun(): num1*=2 print("函数内修改后num1=",num1) num1=1 print("初始num1=",num1) fun() print("运行完函数后num1=",num1)
运行结果:
报错了。这是因为在fun()函数使用了局部变量num1,它只是个跟全局变量同名的局部变量,使用前还是要赋值,因此再次强调不要这样使用
global关键字
如果真的想要在函数体内修改全局变量的值,就要使用global关键字
Demo4:
def fun(): global num1 num1=2 print("函数内修改后num1=",num1) num1=1 print("初始num1=",num1) fun() print("运行完函数后num1=",num1)
运行结果:
使用global关键字就是告诉python编译器这个变量不是局部变量而是全局变量,其实有点像是"引用"的意思
nonlocal关键字
再看看另一个跟变量相关的关键字nonlocal,字面意思就是指当前的这个变量不是局部变量。nonlocal是Python3.0中新增的关键字,python2.x不支持
先来看看下面这段代码
def fun(): num2=3 def fun2(): num2*=2 print("num2=",num2) return fun2() fun()
运行结果:
错误的原因跟前面的差不多,就是使用了未定义的局部变量,然而num2也不是全局变量,只是fun2函数的外层变量,强行使用global定义num2的话同样会报错(不信你试试)
这时候需要使用nonlocal关键字:
def fun(): num2=3 def fun2(): nonlocal num2 num2*=2 print("num2=",num2) return fun2() fun()
运行结果:
如此,程序就能正常执行
总结
到此这篇关于Python中全局变量和局部变量的文章就介绍到这了,更多相关Python全局变量和局部变量内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!
本文向大家介绍Python局部变量与全局变量区别原理解析,包括了Python局部变量与全局变量区别原理解析的使用技巧和注意事项,需要的朋友参考一下 1、局部变量 输出: before change: Yang Li after change 你好 在外面看看name改了么? Yang Li 2、全局变量 输出: 3、nonlocal 全局与局部变量 在子程序中定义的变量称为局部变量,在程序的一开始
问题内容: 我了解Python中局部变量和全局变量的概念,但是我只是有一个问题,为什么下面的代码中会出现错误?Python逐行执行代码,因此在读取第5行之前,它不知道a是局部变量。Python尝试执行第5行后,会回退一行并将其标记为错误吗? 问题答案: 设置和测试 为了分析您的问题,让我们创建两个独立的测试函数来复制您的问题: 版画。因此,调用此函数不是问题,而是在下一个函数上: 我们收到一个错误
本文向大家介绍javascript中局部变量和全局变量的区别详解,包括了javascript中局部变量和全局变量的区别详解的使用技巧和注意事项,需要的朋友参考一下 javascript有两种变量:局部变量和全局变量。当然,我们这篇文章是帮助大家真正的区别这两种变量。 首先,局部变量是指只能在本变量声明的函数内部调用。全局变量时整个代码中都可以调用的变量。当然,单单从字面上理解肯定是不清楚的,下面我
问题内容: 我正在尝试使用exec运行一段python代码。 这导致以下输出 但是,如果我将代码更改为此- 然后工作正常-提供以下输出- 显然,A存在并且可以访问-在第一段代码中出了什么问题?我正在使用2.6.5,欢呼声, 科林 更新1 如果我检查类中的locals()- 然后很明显,locals()在两个地方都不相同- 但是,如果我这样做,就没有问题- 更新2 好的,所以这里的文档-http:
主要内容:局部变量,全局变量,局部变量和全局变量的综合示例在《 C语言形参和实参的区别》中提到,形参变量要等到函数被调用时才分配内存,调用结束后立即释放内存。这说明形参变量的作用域非常有限,只能在函数内部使用,离开该函数就无效了。 所谓 作用域( Scope ) ,就是变量的有效范围。 不仅对于形参变量,C语言中所有的变量都有自己的作用域。决定变量作用域的是变量的定义位置。 局部变量 定义在函数内部的变量称为 局部变量(Local Variable) ,
主要内容:Python局部变量,Python全局变量,获取指定作用域范围中的变量所谓 作用域(Scope),就是变量的有效范围,就是变量可以在哪个范围以内使用。有些变量可以在整段代码的任意位置使用,有些变量只能在函数内部使用,有些变量只能在 for 循环内部使用。 变量的作用域由变量的定义位置决定,在不同位置定义的变量,它的作用域是不一样的。本节我们只讲解两种变量, 局部变量和 全局变量。 Python局部变量 在函数内部定义的变量,它的作用域也仅限于函数内部,出了函数就不能