中职电子与信息:《yhon小屋》3-3-3 变量作用域.docx

上传人:太** 文档编号:93851208 上传时间:2023-07-15 格式:DOCX 页数:4 大小:16.51KB
返回 下载 相关 举报
中职电子与信息:《yhon小屋》3-3-3 变量作用域.docx_第1页
第1页 / 共4页
中职电子与信息:《yhon小屋》3-3-3 变量作用域.docx_第2页
第2页 / 共4页
点击查看更多>>
资源描述

《中职电子与信息:《yhon小屋》3-3-3 变量作用域.docx》由会员分享,可在线阅读,更多相关《中职电子与信息:《yhon小屋》3-3-3 变量作用域.docx(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、234567global xx = 3y = 48 x = 59 demo()10全局变量:311 12 x13 314 y#在函数外部定义了全局变量x局部变量:4#尝试着在函数外部访问一下函数的局部变量Python小屋之三程序控制结构与函数设计3.3函数设计与使用变量作用域变量起作用的代码范围称为变量的作用域,不同作用域内同名变量之间互不影响,就想 不同文件夹的同名文件之间互不影响一样。一个变量在函数外部定义和在函数内部定义,其 作用域是不同的,函数内部定义的变量一般为局部变量,在函数外部定义的变量为全局变量。在函数内部定义的普通变量只在该函数内起作用,当函数运行结束后,在其内部定义的 局部

2、变量将被自动删除而不可访问。在函数内部定义的全局变量当函数结束以后仍然存在并 且可以访问。如果想要在函数内部修改一个定义在函数外的变量值,那么这个变量就不能是局部的, 其作用域必须是全局的。可以在函数内部通过global关键字来声明或定义全局变量,这分两 种情况:(1)一个变量已在函数外定义,如果在函数内需要修改这个变量的值,并将这个赋值 结果反映到函数之外,可以在函数内部用global明确声明要使用已定义的同名全局变量。(2)在函数内部直接使用global关键字将一个变量声明为全局变量,如果在函数外没 有定义该全局变量,在调用这个函数之后,会自动增加新的全局变量。或者说,也可以这样理解:在函

3、数内如果值引用某个变量的值而没有为其赋新值,该变量为(隐式的)全局变 量; def demo():#声明或创建全局变量#修改全局变量的值#局部变量print(,全局变量:局部变量:.format(x,y)15 Traceback (most recent call last):16 File ,/ line 1, in 17 y#尝试着在函数外部访问一下函数的局部变量18 NameError: name y is not defined19 20 del x#删除在函数外部定义的全局变量21 22 x#尝试访问一下全局变量x23 Traceback (most recent call last

4、):24 File , line 1, in 25 x#尝试访问一下全局变量x26 NameError: name x is not defined27 28 demo()#再调用一次函数,该函数会声明全局变量哦29全局变量:3局部变量:430 31 x#在函数内部创建了全局变量x32 333 34 v#局部变量在函数调用结束后自动删除35 Traceback (most recent call last):36 File / line 1, in 37 y38 NameError: name y1 is not defined39 代码块如果局部变量与全局具有相同的名字,那么改局部变量会在自

5、己的作用域内隐藏同名的 全局变量,例如下面的代码所演示。1 def demo():2 x = 3#创建了局部变量,并自动隐藏了同名的全局变量3 print(x)4 x = 5 #创建全局变量5 x859 10 demo()11312 x #函数调用后,不影响全局变量x的值13 514 16#个人理解:17#局部变量的作用范围是函数体内,即使和全局变量同名了,在函数体内修改局部变 量的值,也不会影响全局变量的值1819#在函数外修改全局变量的值,不会影响函数体内局部变量的值代码块最后,如果需要在同一个程序的不同模块之间共享全局变量,可以编写一个专门的模块 来实现这一目的。例如,假设在模块A.py

6、中有如下变量定义:global_variable = 0而在模块B.py中使用以下语句修改全局变量的值:import AA.global_variable = 1在模块C.py中使用以下语句来访问全局变量的值:import Aprint(A.global_variable )小提示:(1)一般而言,局部变量的引用比全局变量速度快,应优先考虑使用;(2)应尽量避免过多使用全局变量,因为全局变量会增加不同函数之间的隐式耦合度, 降低代码可读性,并使得代码测试和纠错变得很困难。拓展知识:局部变量的空间是在栈上分配的,而栈空间是由操作系统维护的,每当调用 一个函数时,操作系统会为其分配一个栈帧,函数调

7、用结束后立刻释放这个栈帧。因此,函 数调用结束后,该函数内部所有的局部变量都不再存在。拓展知识:除了局部变量和全局变量,Python还支持nonlocal关键字定义一种介于两 者之间的变量。例如下面代码:1 def scope_test():2 def do_local():3 spam =我是局部变量4 def do_nonlocal():5 nonlocal spam#这时要求spam必须是已存在的变量6 spamd我不是局部变量,也不是全局变量7 def do_global():8 global spam#如果全局作用域内没有spam,就自动创建一个9 spam =我是全局变量10 sp

8、am = 1原来的值,11 do_local()12 print(局部变量赋值后:spam)13 do_nonlocal()14 print(nonlocal 变量赋值后。spam)15 do_global()20print(全局变量赋值后spam)212223 scope_test()24 print(全局变量:,spam)2526#局部变量赋值后:原来的值27#nonlocal变量赋值后:我不是局部变量,也不是全局变量28#全局变量赋值后我不是局部变量,也不是全局变量29#全局变量:我是全局变量3031#哈哈,感觉这个nonlocal就是用在嵌套函数中的,用于在子函数和父函数之间传递 变量值的。而local是用于父函数和模块之间传递变量值的。这一点需耍知道。代码块

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 解决方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁