作用域就是一个 python 程序可以直接访问命名空间的正文区域。
在一个 python 程序中,直接访问一个变量,会从内到外依次访问所有的作用域直到找到,否则会报未定义的错误。
python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。
变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。python的作用域一共有4种,分别是:
有四种作用域:
l(local):最内层,包含局部变量,比如一个函数/方法内部。
e(enclosing):包含了非局部(non-local)也非全局(non-global)的变量。比如两个嵌套函数,一个函数(或类) a 里面又包含了一个函数 b ,那么对于 b 中的名称来说 a 中的作用域就为 nonlocal。
g(global):当前脚本的最外层,比如当前模块的全局变量。
b(built-in): 包含了内建的变量/关键字等。,最后被搜索
规则顺序: l –> e –> g –>gt; b。
在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。
内置作用域是通过一个名为 builtin 的标准模块来实现的,但是这个变量名自身并没有放入内置作用域内,所以必须导入这个文件才能够使用它。在python3.0中,可以使用以下的代码来查看到底预定义了哪些变量:
python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问,如下代码:
实例中 msg 变量定义在 if 语句块中,但外部还是可以访问的。
如果将 msg 定义在函数中,则它就是局部变量,外部不能访问:
从报错的信息上看,说明了 msg_inner 未定义,无法使用,因为它是局部变量,只有在函数内可以使用。
京东部分商品不可以7天无理由退货掌握了良好的SEO思维,就会有一个良好的开端icu是国内域名吗云服务器跟云数据库有什么区别CN2线路服务器优势在哪?物理机和云服务器有什么区别呀怎么在阿里云租个服务器吗云服务器可以挂载本地硬盘吗