百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python基础教程——全局变量和局部变量的应用操作,你都掌握了吗

off999 2024-11-07 11:43 27 浏览 0 评论

前言

学编程的总离不开全局变量和局部变量,那么,首先我们要知道局部变量和全局变量的定义:

局部变量:定义在函数内部的变量称为局部变量,它的作用域范围为函数内,也就是除了函数外就无效。举个简单的例子:哪吒在国内基本大家都认识他,大家一看到他就会知道,咦,那是哪吒。但是一旦出了国外,就没有人认识他了,哪吒的作用域范围就为国内。

全局变量:定义在函数外的变量称之为全局变量,它的作用域范围为全局。再举个例子:如果把函数比作国家,那么全局就是全球,全局变量就像是阿拉伯数字,你去到哪,大家都认识。

由上面的定义可以看出,所谓的全局变量跟局部变量主要是针对函数内外而言的。

示例

我们接下来举个简单的例子说明全局变量跟局部变量在实际应用中的区别:

a = "python"   # 函数外定义的a为全局变量
def func1():
    print (a)
def func2():
    b = "小黑屋"  # 函数内定义的b为局部变量
    print (b)
func1()          # 执行函数func1
func2()          # 执行函数func2
print(b)         # 输出函数func2中的局部变量b
>>python         # 函数func1执行后输出全局变量a
>>小黑屋          # 函数func2执行后输出局部变量b
                 # 在函数外输出局部变量b,出现了未定义的报错
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    print(b)
NameError: name 'b' is not defined

由上面的例子可以看出,局部变量只能在函数内部使用,而全局变量是全局范围内都能引用。

但如果在函数内定义了一个跟全局变量一样名字的变量,这时候会怎样呢?请看例子:

a = "python"
def func1():
    a = '小黑屋'
    print (a)
def func2():
    print(a)
func1()
func2()
print (a)
>>小黑屋
>>python
>>python

由上可知,当你在函数内定义一个与全局变量一样名字的变量时,相当于你在函数内重新定义了一个局部变量,为什么这样说呢,因为你会发现,你在函数内重新定义这个变量后,无论你在函数内怎样改动这个函数的值,只有在函数内生效,对全局来说是没有任何影响的。也可以从侧面推测出,函数内定义的局部变量优先级大于全局变量

两者之间的关系

全局作用域中程序不能使用局部作用域中的变量,但是局部作用域中可以使用全局变量。同时局部作用域不可以使用其他局部作用域中的变量。

请看实例:

  def spam():
    eggs=99
    bacon()
    print(eggs)
def bacon():
    ham=101
    eggs=0
spam() #99

实例分析:为什么输出的是99而不是0呢?

在程序开始运行时, spam()函数被调用, 创建了一个局部作用域。局部变量eggs被赋值为 99。然后 bacon()函数被调用, 创建了第二个局部作用域。多个局部作用域能同时存在。在这个新的局部作用域中, 局部变量 ham 被赋值为 101。局部变量 eggs(与 spam()的局部作用域中的那个变量不同) 也被创建, 并赋值为 0。当 bacon()返回时, 这次调用的局部作用域被销毁。程序执行在 spam()函数中继续, 打印出 eggs 的值。因为 spam()调用的局部作用域仍然存在, eggs 变量被赋值为 99。

要点在于,一个函数中的局部变量完全与其他函数中的局部变量分隔开来。

global 和nonlocal关键字

当局部作用域想要修改全局作用域中的变量时,就需要用到global和nonlocal关键字了。

如果要修改全局变量,要用到global管家字:

#全局变量可以在局部变量中读取
def spam():
    global eggs
    print(eggs)
    eggs=10
    print(eggs)
eggs=42
spam() # 42 10 

如果要修改嵌套作用域(enclosing作用域,就是外层的非全局作用域)则需要nonlocal关键字,如下:

def outer():
    num=10
    def inner():
        nonlocal num #nonlocal关键字声明
        num=99
        print(num)
    inner()
    print(num)
outer() # 99 99

还有一种情况,通过参数传递来使用全局变量,如下实例:

a=10
def test():
    a=a+1
    print(a)
test()

运行后会报错:

Traceback (most recent call last):
  File "E:/IdeaProjects/Demi/20180904-1.py", line 151, in <module>
    test()
  File "E:/IdeaProjects/Demi/20180904-1.py", line 149, in test
    a=a+1
UnboundLocalError: local variable 'a' referenced before assignment

报错为局部作用域引用错误。但是可以将全局变量a作为参数传入到test函数中,如下:

a=10
def test(a):
    a=a+1
    print(a)
test(a) #11 

输出就是11了。

文字整理出来,看起来比较晦涩,小编之前也有整理过全局变量和局部变量的视频讲解,点击【视频】即可参考查阅,对大家学习更有帮助哦~~~

请大家多多点赞评论转发,你们的支持就是小编最大的动力,请关注小编,后续会再为大家带来更多的学习内容哦~~~

相关推荐

拼音输入法哪个最好用(电脑打字常用输入法)

拼音输入法推荐使用谷歌拼音输入法。谷歌的拼音输入法,有五大特色:智能输入:选词和组句准确率高,能聪明地理解您的意图,短句长句,随想随打。时尚语汇:海量词库整合了互联网上的流行语汇和热门搜索词。...

ps软件官方免费下载电脑版免费

1:点击下载好的安装包先进行解压,然后点击“Photoshop_CS6_CHS_lite.exe”文件2:在弹开的界面中点击“自定义安装”,这里小编说明一下,如果用户选择“快速安装”的话,那么软件的安...

传奇盒子平台大全(传奇盒子赚钱)

在996传奇盒子中,会员玩家可以在“我的游戏”中通过“云玩”进入之前体验过的传奇游戏,开启挂机模式后,就能在“云多开”系统里观察到自己的云设备和正在进行云游戏状态的传奇游戏,如果点进手机后台,还能看到...

pdf查看软件(查看pdf格式的软件)

pdf当然可以有查找功能:1、第一步:首先我们要使用WPSOffice打开PDF文档。2、第二步:我们需要依次点击“开始”--->“查找”(或使用快捷键“Ctrl+F”)。3、第三步:我们在查...

中国象棋下载安装(下载中国象棋官方版)

不用刻意下载个中国象棋APP,只需要下载一个QQ游戏,里头就有中国象棋玩了,里头点开后,自动下载,还可以连接其他玩家,一起玩,切磋棋艺。你这问题太模糊了。。。是你有一个象棋游戏,想放到桌面上,双击就可...

手机bt下载软件哪个好(手机有什么下载bt的软件)

磁力下载app推荐黑科技APP,这个好用黑科下载器APP也是一款功能强大且使用的下载类工具应用,它支持磁力以及种子文件的下载。还可以把下载的的文件转存到云盘,并支持在线的云播预览功能,无需等待能直接边...

狂野飙车9下载(狂野飙车9下载入口)

您可以在AppStore搜索“狂野飙车9”或者直接使用Safari等浏览器搜索“狂野飙车9官方下载”,进入官网下载页面,点击下载按钮并根据提示进行下载安装即可。在下载前请确保您的苹果设备已连接稳定...

免费相册视频制作软件(怎么把拍的照片做成视频)
免费相册视频制作软件(怎么把拍的照片做成视频)

电脑端1.会声会影会声会影上手简单而且做出的相册的效果也很不错,很适合新手使用,x7以前的版本都是可以自己去免费用的。2.premiere(pr)pr是一款比较专业的视频剪辑制作软件,用它来做电子相册也是很不错的,做出的效果很高大上,如果只...

2026-01-17 21:43 off999

图片文字修改神器免费(手机无痕修改图片文字软件)

首先区分是完整图片导入还是ai软件自己编写的文字,如果导入的图片无法修改,只能像ps一样去修图,如果是软件编写的,无法选取先要解锁,方法:上面任务栏对象-选择全部解锁。然后修改。修改方法:如果对方编组...

开户最忌三个证券公司(随便哪个证券公司开户都一样吗)

在不同的证券公司开户,确实存在一些区别。首先,不同的证券公司提供的交易品种和交易费用可能不同,有些公司可能提供更广泛的投资选择,而有些公司则可能提供更低的佣金率,这直接影响到您的投资成本和收益。其次,...

农行手机银行app下载(中国农业银行App下载)

自己下载的农行手机银行是能转账的,只是额度可能会要低一些,比如一类卡,在农行网点注册下载并开通手机银行,一天转账的额度是有十万,而自己下载注册开通的手机银行额度则只有5万,自己是可以下载农行手机银行是...

下载本机手机管家(手机管家华为专用版下载)

可以在手机的应用商店中下载就可以了你看看有没有办法把他弄到桌面上,比如刷新桌面,如果影响使用的话,建议恢复出厂设置吧,我以前也出现过这种情况,刷机之后就好了电脑管家目前是不支持手机终端登录的所以无法...

街机游戏平台(街机游戏平台官网)
  • 街机游戏平台(街机游戏平台官网)
  • 街机游戏平台(街机游戏平台官网)
  • 街机游戏平台(街机游戏平台官网)
  • 街机游戏平台(街机游戏平台官网)
侠盗飞车下载(侠盗飞车下载手机版)
  • 侠盗飞车下载(侠盗飞车下载手机版)
  • 侠盗飞车下载(侠盗飞车下载手机版)
  • 侠盗飞车下载(侠盗飞车下载手机版)
  • 侠盗飞车下载(侠盗飞车下载手机版)
广州疫情最新消息(广州疫情最新消息通知)

 当然可以,深圳去广州的交通发达也便捷,可以乘坐大巴车、火车、高铁、自驾车均可到达广州的各大客运站、火车站、城市地标,到站后还可以乘坐公交车、地铁、打车到你想去的目的地。 深圳...

取消回复欢迎 发表评论: