《信息技术:94Python变量作用域(全局变量和局部变量).docx》由会员分享,可在线阅读,更多相关《信息技术:94Python变量作用域(全局变量和局部变量).docx(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Python变量作用域(全局变量和局部变量)所谓作用域(Scope ),就是变量的有效范围,就是变量可以在哪个范围以内使用。有些变 量可以在整段代码的任意位置使用,有些变量只能在函数内部使用,有些变量只能在for循 环内部使用。变量的作用域由变量的定义位置决定,在不同位置定义的变量,它的作用域是不一样的。本 节我们只讲解两种变量,局部变量和全局变量。Python局部变量在函数内部定义的变量,它的作用域也仅限于函数内部,出了函数就不能使用了,我们将这 样的变量称为局部变量(Local Variable )。要知道,当函数被执行时,Python会为其分配一块临时的存储空间,所有在函数内部定义 的变
2、量,都会存储在这块空间中。而在函数执行完毕后,这块临时存储空间随即会被释放并 回收,该空间中存储的变量自然也就无法再被使用。举个例子:1. def demo():2. add = print(函数内部 add =,add)3. demo()4. print(函数外部 add =,add)程序执行结果为:函数内部 add = Traceback (most recent call last):File “C:UsersmengmaDesktopfile.py line 6, in print(函数外部 add =fadd)NameError: name add is not defined可以看
3、到,如果试图在函数外部访问其内部定义的变量,Python解释器会报NameError 错误,并提示我们没有定义要访问的变量,这也证实了当函数执行完毕后,其内部定义的变 量会被销毁并回收。值得一提的是,函数的参数也属于局部变量,只能在函数内部使用。例如:1. def demo(name,add):2. print(函数内部 name name)print(函数内部 add =,add)3. demo(Python 教程J :/4. print(函数夕卜部 name =,name)print(“函数外部 add =,add)程序执行结果为:函数内部name = Python教程函数内部 add =
4、 Traceback (most recent call last):File C:UsersmengmaDesktopfile.py, line 7, in print(函数夕卜部 name =,name)NameError: name name is not defined由于Python解释器是逐行运行程序代码,由此这里仅提示给我name没有定义,实际上在函数外部访问add变量也会报同样的错误。Python全局变量除了在函数内部定义变量,Python还允许在所有函数的外部定义变量,这样的变量称为全 局变量(Global Variable ) o和局部变量不同,全局变量的默认作用域是整个程
5、序,即全局变量既可以在各个函数的外部 使用,也可以在各函数内部使用。定义全局变量的方式有以下2种:在函数体外定义的变量,一定是全局变量,例如:1. add = . text():2. print。函数体内访问add)text()3. print(函数体外访问:,add)运行结果为:函数体内访问:函数体外访问: :变为全局变量。例如:4. def text():5. global addadd= 6. print(函数体内访问:add)text()7. print(函数体外访问:add)运行结果为:函数体内访问:函数体外访问:注意,在使用global关键字修饰变量名时,不能直接给变量赋初值,否那
6、么会引发语法错误。获取指定作用域范围中的变量在一些特定场景中,我们可能需要获取某个作用域内(全局范围内或者局部范围内)所有的变量,Python提供了以下3种方式:1) globals。函数globals()函数为Python的内置函数,它可以返回一个包含全局范围内所有变量的字典, 该字典中的每个键值对,键为变量名,值为该变量的值。举个例子:1.#全局变量2.2.Pyname = Python 教程”Pyadd = 3. def text():4. #局部变量Shename = shell 教程”5. Sheadd= print(globals()程序执行结果为: z Pyname: Pytho
7、n 教程丁Pyadd: y/ .注意,globals()函数返回的字典中,会默认包含有很多变量,这些都是Python主程序内置的,读者暂时不用理会它们。可以看到,通过调用globalsO函数,我们可以得到一个包含所有全局变量的字典。并且, 通过该字典,我们还可以访问指定变量,甚至如果需要,还可以修改它的值。例如,在上面程序的基础上,添加如下语句:1. printfglobalsOtPyname)globalsOIPyname = Python 入门教程2. print(Pyname)程序执行结果为:Python教程Python入门教程2) locals。函数locals()函数也是Python
8、内置函数之一,通过调用该函数,我们可以得到一个包含当前作用域内所有变量的字典。这里所谓的当前作用域指的是,在函数内部调用localsQ函数,会获得包含所有局部变量的字典;而在全局范文内调用localsQ函数,其功能和globalsQ函数相同。举个例子:1. #全局变量Pyname = Python 教程”2. Pyadd = def text():3. #局部变量Shename = shell 教程”4. Sheadd= print(函数内部的 locals:)5. print(locals()text()6. print(函数外部的 locals:)print(locals()程序执行结果为
9、:函数内部的locals:Sheadd: y/ Shename: shell 教程函数外部的locals:,Pyname: Python 教程丁Pyadd: : 回的字典中会默认包含有很多变量,这些都是Python主程序内置的,读 者暂时不用理会它们。注意,当使用localsQ函数获得所有局部变量组成的字典时,可以向globalsQ函数那样,通过指定键访问对应的变量值,但无法对变量值做修改。例如:1. #全局变量Pyname = Python 教程”2. Pyadd = def text():3. #局部变量Shename = shell 教程”4. Sheadd= print(locals(
10、)Shename)5. locals()Shename = shell 入门教程print(Shename)6. text()程序执行结果为:shell教程shell教程显然,locals。返回的局部变量组成的字典,可以用来访问变量,但无法修改变量的值。3) vars(object)vars()函数也是Python内置函数,其功能是返回一个指定object对象范围内所有变量组成的字典。如果不传入object参数,vars()和localsQ的作用完全相同。由于目前读者还未学习Python类和对象,因此初学者可先跳过该函数的学习,等学完Python类和对象之后,再回过头来学习该函数。举个例子:1. #全局变量Pyname = Python 教程”2. Pyadd = class Demo:3. name = Python 教程”add = 4. print(“有 object:)print(vars(Demo)5. print(“无 object:)6. print(vars()程序执行结果为:有 object :/name: Python 教程add: ;无 object:z Pyname: Python 教程丁Pyadd: :