中职电子与信息:《yhon小屋》3-3-3 变量作用域_第1页
中职电子与信息:《yhon小屋》3-3-3 变量作用域_第2页
中职电子与信息:《yhon小屋》3-3-3 变量作用域_第3页
中职电子与信息:《yhon小屋》3-3-3 变量作用域_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

234567234567globalxx=3y=4»>x=5»>demo()10全局变量:3»>»>x3»>y#在函数外部定义了全局变量x局部变量:4#尝试着在函数外部访问一下函数的局部变量《Python小屋》之三程序控制结构与函数设计3.3函数设计与使用变量作用域变量起作用的代码范围称为变量的作用域,不同作用域内同名变量之间互不影响,就想不同文件夹的同名文件之间互不影响一样。一个变量在函数外部定义和在函数内部定义,其作用域是不同的,函数内部定义的变量一般为局部变量,在函数外部定义的变量为全局变量。在函数内部定义的普通变量只在该函数内起作用,当函数运行结束后,在其内部定义的局部变量将被自动删除而不可访问。在函数内部定义的全局变量当函数结束以后仍然存在并且可以访问。如果想要在函数内部修改一个定义在函数外的变量值,那么这个变量就不能是局部的,其作用域必须是全局的。可以在函数内部通过global关键字来声明或定义全局变量,这分两种情况:(1)一个变量已在函数外定义,如果在函数内需要修改这个变量的值,并将这个赋值结果反映到函数之外,可以在函数内部用global明确声明要使用已定义的同名全局变量。(2)在函数内部直接使用global关键字将一个变量声明为全局变量,如果在函数外没有定义该全局变量,在调用这个函数之后,会自动增加新的全局变量。或者说,也可以这样理解:在函数内如果值引用某个变量的值而没有为其赋新值,该变量为(隐式的)全局变量;<2〉如果在函数内任意位置有为变量赋值的操作,该变量即被认为是(隐式的)局部变量,除非在函数内显式地用global进行声明。下面的代码演示了局部变量和全局变量的用法。1»>defdemo():#声明或创建全局变量#修改全局变量的值#局部变量print(,全局变量:{}局部变量:{}'.format(x,y))15Traceback(mostrecentcalllast):16File"<pyshell#ll>,,/line1,in<module>y#尝试着在函数外部访问一下函数的局部变量NameError:name'y'isnotdefined»>»>delx#删除在函数外部定义的全局变量»>»>x#尝试访问一下全局变量xTraceback(mostrecentcalllast):File,,<pyshell#15>",line1,in<module>x#尝试访问一下全局变量xNameError:name'x'isnotdefined»>»>demo()#再调用一次函数,该函数会声明全局变量哦29全局变量:3局部变量:4»>»>x#在函数内部创建了全局变量x3»>»>v#局部变量在函数调用结束后自动删除Traceback(mostrecentcalllast):36File"<pyshell#21>"/line1,in<module>yNameError:name'y1isnotdefined»>代码块如果局部变量与全局具有相同的名字,那么改局部变量会在自己的作用域内隐藏同名的全局变量,例如下面的代码所演示。»>defdemo():x=3#创建了局部变量,并自动隐藏了同名的全局变量print(x)»>x=5#创建全局变量»>x85»>»>demo()113»>x#函数调用后,不影响全局变量x的值5»>16#个人理解:17#局部变量的作用范围是函数体内,即使和全局变量同名了,在函数体内修改局部变量的值,也不会影响全局变量的值1819#在函数外修改全局变量的值,不会影响函数体内局部变量的值代码块最后,如果需要在同一个程序的不同模块之间共享全局变量,可以编写一个专门的模块来实现这一目的。例如,假设在模块A.py中有如下变量定义:global_variable=0而在模块B.py中使用以下语句修改全局变量的值:importAA.global_variable=1在模块C.py中使用以下语句来访问全局变量的值:importAprint(A.global_variable)小提示:(1)一般而言,局部变量的引用比全局变量速度快,应优先考虑使用;(2)应尽量避免过多使用全局变量,因为全局变量会增加不同函数之间的隐式耦合度,降低代码可读性,并使得代码测试和纠错变得很困难。拓展知识:局部变量的空间是在栈上分配的,而栈空间是由操作系统维护的,每当调用一个函数时,操作系统会为其分配一个栈帧,函数调用结束后立刻释放这个栈帧。因此,函数调用结束后,该函数内部所有的局部变量都不再存在。拓展知识:除了局部变量和全局变量,Python还支持nonlocal关键字定义一种介于两者之间的变量。例如下面代码:defscope_test():defdo_local():spam='我是局部变量'defdo_nonlocal():nonlocalspam#这时要求spam必须是已存在的变量spamd我不是局部变量,也不是全局变量’defdo_global():globalspam#如果全局作用域内没有spam,就自动创建一个spam='我是全局变量’spam=1原来的值,do_local()print('局部变量赋值后:[spam)do_nonlocal()print('nonlocal变量赋值后。spam)do_global()20print('全局变量赋值后spam)212223scope_test()24print('全局变量:',spam)2526#局部变量赋值后:原来的值27#nonlocal变量赋值后:我不是局部变量,也不是全局

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论