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

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

off999 2024-11-07 11:43 18 浏览 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了。

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

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

相关推荐

最纯净的pe装机工具(pe工具哪个纯净)

U盘装系统步骤:1.制作U盘启动盘。这里推荐大白菜U盘启动盘制作工具,在网上一搜便是。2.U盘启动盘做好了,我们还需要一个GHOST文件,可以从网上下载一个ghost版的XP/WIN7/WIN8系统,...

装一个erp系统多少钱(wms仓库管理软件)

现在主流有客户端ERP和云端ERP两种客户端通常一次买断,价格在万元左右,但是还有隐性费用,你需要支付服务器、数据管理员,此外如果系统需要更新维护,你还需要支付另外一笔不菲的费用。云端ERP:优势...

cad2014序列号和密钥永久(autocad2014序列号和密钥)

1在cad2014中修改标注样式后,需要将其保存2单击“样式管理器”按钮,在弹出的窗口中选择修改后的标注样式,然后单击“设置为当前”按钮,再单击“保存当前样式”按钮,将其保存为新的样式名称3为了...

qq修改密保手机号(qq修改密保手机号是什么意思)

QQ更改绑定的手机号码操作步骤如下:1、打开手机主界面,找到“QQ”软件点击打开。2、输入正确的QQ账户和密码登录到qq主界面。3、点击左上角的头像“图片”,进入到个人中心界面。4、进入到个人中心界面...

dell笔记本客服电话(dell笔记本客服电话人工服务)

戴尔中国的官方网站http://www.dell.com/zh-cn。通过这个网站购买的都没有问题;有问题也可以进入官网联系售后客服,也可以拔打dell电脑说明书上的售后热线,都可以为你解决的。还是建...

联想乐商店app官方下载(联想乐商店在哪下载)

您好!很遗憾!若是您的手机联想乐商店和联想游戏中心只能有流量,建议您核实是否乐安全有限制wifi上网,核实您所使用的wifi是否本身有限制。若还是无效,可清除缓存数据;备份资料恢复出厂设置尝试。欢迎您...

fat32u盘(FAT32u盘多少钱一个)
  • fat32u盘(FAT32u盘多少钱一个)
  • fat32u盘(FAT32u盘多少钱一个)
  • fat32u盘(FAT32u盘多少钱一个)
  • fat32u盘(FAT32u盘多少钱一个)
不用拉网线的路由器是真的吗

是真的不插卡不拉线有线就有网,这11个字其实就涵盖了无线路由器的特点,无线路由器免插卡、不用拉网线,完全摆脱了之前家用路由器和网线捆绑的模式,有电就有网,其实说的就是无线路由器的使用操作简单,通电就可...

微信恢复好友怎么弄回来(vx好友恢复)
  • 微信恢复好友怎么弄回来(vx好友恢复)
  • 微信恢复好友怎么弄回来(vx好友恢复)
  • 微信恢复好友怎么弄回来(vx好友恢复)
  • 微信恢复好友怎么弄回来(vx好友恢复)
u盘检测软件下载(u盘测试软件)

1、u盘芯片检测工具(ChipEasy)可以查看USB设备PID、VID、SN、制造商、产品名等;2、查看USB设备主控芯片信息、闪存芯片信息、固件信息、电流控制3、SSD型号...

电脑现在什么系统最好(电脑现在用什么系统好)

WINXP好用,但过时了。VISTA不好用,没推开就夭折了。WIN8/8.1是针对触模屏设计的,如果你用的不是触摸屏平板电脑是普通电脑,使WIN8/8.1总觉着很蹩扭。新出的WIN10,功能...

账号怎么注册(steam账号怎么注册)

如果注册是qq账号【qq号码的申请办法】【1】双击qq登陆界面,在qq帐号填写空格的后面你可以看见:[申请帐号];【2】点击[申请帐号]进入,就可以在网上免费申请号码了;【3】进入www.qq.com...

tmp文件是什么意思(tmp文件有什么用)

在系统C:\Windows\Temp文件夹中,我们经常会发现一些后缀名为TMP的文件,在该文件夹中的这些文件其实都是临时文件。它们可能是系统被误关机,或者其他程序没有删除而生的。而且在该文件夹中还有其...

怎么给u盘格式化(怎么给u盘格式化成FAT32)

u盘插入电脑,等待桌面弹出u盘图标。打开“计算机”。左键选中u盘,单击右键,在弹出的菜单中,点击“格式化”。点击“开始”,点击“确定”即可。格式化u盘详细步骤1、找到U盘盘符,鼠标右键点击,弹出菜单中...

harmonyos主题下载(harmonyos主题怎么换)

首先,打开荣耀手机的应用市场,在搜索框中输入“华为鸿蒙主题”,然后点击搜索。找到“华为鸿蒙主题”应用后,点击下载即可。下载完成后,打开“华为鸿蒙主题”应用,选择心仪的主题,点击下载并应用即可享受华为鸿...

取消回复欢迎 发表评论: