2.2.1.8 Python命名空间和作用域_第1页
2.2.1.8 Python命名空间和作用域_第2页
2.2.1.8 Python命名空间和作用域_第3页
2.2.1.8 Python命名空间和作用域_第4页
2.2.1.8 Python命名空间和作用域_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

Python命名空间和作用域大数据投融资管理任务1.1:Python基础编程Python模块一、命名空间变量是拥有匹配对象的名字(标识符)。命名空间是一个包含了变量名称们(键)和它们各自相应的对象们(值)的字典。每个函数都会有自己的命名空间,当变量出现在函数内部时,Python默认其为局部变量,若存在一个与局部变量重名的全局变量,则由局部变量覆盖全局变量。Python的命名空间分局部命名空间和全局命名空间。Python模块命名空间一般有三种:①内置命名空间(Built-innamespace):Python语言内置的名称,如函数名abs、char和异常名称BaseException、Exception等。②全局命名空间(Globalnamespace):模块中定义的名称,记录了模块的变量,包括函数、类、Built-innamespace其他导入的模块、模块级的变量和常量。③局部命名空间(Localnamespace):函数中Globalnamespace定义的名称,记录了函数的变量,包括函数的参数和局部定义的变量(类中定义的也是如此)。(1)命名空间的类别Python模块假设要使用变量chinazdap,则Python的查找顺序为:局部命名空间→全局命名空间→内置命名空间。如果找不到变量chinazdap,将放弃查找并引发一个NameError异常:NameError:name'chinazdap'isnotdefined。(2)命名空间查找顺序Python模块命名空间的生命周期取决于对象的作用域,如果对象执行完成,则该命名空间的生命周期就结束。因此,我们无法从外部命名空间访问内部命名空间的对象。示例:#varl是全局名称varl=7defsome_func():#var2是局部名称var2=8defsome_inner_func():#var3是内嵌的局部名称var3=9(3)命名空间的生命周期Python模块二、作用域作用域是作用范围,是一个Python程序可以直接访问命名空间的正文区域。按生效范围可分为全局作用域和局部作用域。在一个Python程序中,直接访问一个变量,会从内到外依次访问所有的作用域直到找到该变量,否则会报未定义的错误。在Python中,程序的变量并不是在哪个位置都可以被访问的,访问权限决定于这个变量是在哪里被赋值的。Python模块定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。局部变量只能在其被声明的函数内部被访问,而全局变量可以在整个程序范围内被访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。(1)作用域的类别

变量的作用域决定了在哪一部分程序可以访问哪个特定的变量。Python的作用域一共有4种。LocalEnclosingGlobalBuilt-inPython模块(2)作用域的查找顺序

Enclosing→Global→Built-in.在局部作用域找不到时,便会去局部作用域外的Enclosing去找,再找不到就会去全局作用域找,还是找不到再去内置作用域中找。示例:g_count=0#全局作用域defouter():o_count=1#外部函数的本地作用域definner():i_count=2#局部作用域Python模块内置作用域是通过一个名为builtin的标准模块来实现的,但是这个变量名自身并没有放入内置作用域内,所以必须导入这个文件才能够使用它。在Python3.0中,可以使用以下的代码来查看到底预定义了哪些变量:>>>importbuiltins>>>dir(builtins)Python中只有模块(module),类(class)及函数(def、lambda)才会引入新的作用域,其他的代码块(如if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问,如下代码:Python模块>>>ifTrue:···

msg='IamfromRunoob'···>>>msg'IamfromRunoob'>>>示例中msg变量定义在if语句块中,但外部还是可以访问的。如果将msg定义在数中,则它就是局部变量,外部不能访问:Python模块>>>def

test():···

msg_inner='IamfromRunoob'···>>>msg_innerTraceback(mostrecentcalllast):File"<stdin>",line1,in<module>NameError:name'msg_inner'isnotdefined>>>从报错的信息上看,说明msg_inner未被定义,无法使用,因为它是局部变量,只有在函数内才可以使用。Python模块三、命名空间和作用域的区别命名空间是比作

温馨提示

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

评论

0/150

提交评论