python中变量不需要事先声明_python 变量搜寻顺序法则LEGB之E注意事项
众所周知,在python中,变量不需要事先声明,赋值后,即可调用使用。而调用的法则遵从LEGB法则,其中L为local,E为enclosing,G为Global,B为built-in,即变量首先在局部搜索,比如一个函数中,如果没有搜寻到,则继续在enclosing中搜寻,比如嵌套函数中更靠外侧的函数,如果还是没有,则搜索全局变量,如果还是没有,就搜索内建变量名,最终找不到的话,则抛出异常。当然,值得一提的是,如果定义了nonlocal,那么将不遵从LEGB法则。
今天要总结的重点是,虽然class 也提供local scope,但是它与函数进行嵌套时,不会产生enclosing的范围,即它嵌套的函数,实际上是class 的方法,不构成enclosing scope,其调用的变量需要通过instance,或者class 获取,但其与外层的def 构成enclosing scope,对外层的变量可以直接获取。下面上代码:
defgenerate():classspam:
count=1
defmethod(self):print(spam.count)return spam()
这段代码中,method与class并不形成enclosing scope,获取count,只能通过spam。
如果method直接打印count,如下:
defgenerate():classspam:
count=1
defmethod(self):print(count)return spam()
>>>generate().method()
Traceback (most recent call last):
File"", line 1, in generate().method()
File"", line 5, inmethodprint(count)
NameError: name'count' is not defined
而当count位于两个def 之间时,就构成了enclosing scope,就可以直接调用获取,如下:
defgenerate():
count=1
classspam:defmethod(self):print(count)return spam()
运行:
>>>generate().method()1
python中变量不需要事先声明_python 变量搜寻顺序法则LEGB之E注意事项相关推荐
- python变量使用前必须声明_python变量不需要声明吗
Python中常见的数据类型有字符串,整形,列表,元组,字典等. 在Python语言中,声明变量的同时需要为其赋值,毕竟不代表任何值的变量毫无意义,Python语言中也不允许有这样的变量. 语法结构如 ...
- python内存管理 变量无需事先声明_python 内存管理
内存管理 包括: 变量无须事先声明 变量无须指定类型 不用关心内存管理 变量名会被"回收" del 语句能够直接释放资源 变量定义 python中, 变量在第一次被赋值时自动声明, ...
- python中变量不需要事先声明_第二章 Python 变量
2.1 Python变量 在 Python 中变量不需要事先声明变量名及其类型,直接赋值即可创建各种变量(不要使用关键字为变量名),例如: >>>x = 4 >>> ...
- python内存管理 变量无需事先声明_Python 快速入门
一团网资讯 一团资讯 > python > Python 快速入门 Python 快速入门 2017-11-09 03:01:22 发布者:来源网络 1.Python语句中一些基本 ...
- python中int表示的数据类型是_python中的基本数据类型之 int bool str
一.基本数据类型 1. int ==> 整数.主要用来进行数学运算. 2.str ==> 字符串.可以保存少量的数据,并进行相应的操作. 3.bool => 布尔值.判断 ...
- python跨函数调用变量_对python中不同模块(函数、类、变量)的调用详解
首先,先介绍两种引入模块的方法. 法一:将整个文件引入 import 文件名 文件名.函数名( ) / 文件名.类名 通过这个方法可以运行另外一个文件里的函数 法二:只引入某个文件中一个类/函数/变量 ...
- python中的对象是什么意思_python中什么是对象
详细内容 Python从设计之初就是一门面向对象的语言,它有一个重要的概念,即一切皆对象. Java虽然也是面向对象编程的语言,但是血统没有Python纯正.比如Java的八种基本数据类型之一int, ...
- python一个函数调用另一个函数中的变量_在Python 中同一个类两个函数间变量的调用方法...
在Python 中同一个类两个函数间变量的调用方法 更新时间:2019年01月31日 15:44:54 作者:wxy_summer 今天小编就为大家分享一篇在Python 中同一个类两个函数间变量的调 ...
- python中find是什么意思啊_python中str的find()
今天学习语法的时候发现字符串自带函数find和操作符in功能十分近似,几乎一模一样 if'a'inname: print'Yes, it contains the string "a&quo ...
最新文章
- 树莓派:人在太空,刚下火箭,诚招小于19岁的代码开发者
- 不愧是摸鱼高手Python matplotlib 绘制频谱图都会,能怪老板不管
- c++string类默认函数实现
- 如何使用图形界面Webmin管理linux服务器
- 【BZOJ 1528】 1528: [POI2005]sam-Toy Cars (贪心+堆)
- P5322-[BJOI2019]排兵布阵【背包】
- php7.2 event扩展php_sockets_le_socket错误解决
- 不得不看之跳槽加薪利器:2019需求最旺盛的十大IT技能
- 20172325 2018-2019-1 蓝墨云班课实验--哈夫曼树的编码
- 【wav音频解析】之wavread函数的C++实现
- 复现 ASPCMS企业建站系统Cookies欺骗漏洞
- 使用CUPS打印服务
- php 获取 ip 并根据 ip 获取地理位置
- Qt QImage scaled方法缩放中的问题
- 线性回归模型-最小二乘法Ordinary Least Squares
- Win11,MySQL8 安装教程。
- 熬夜再战Android之修炼Kotlin-为什么要搞她?
- 几种基本的数据结构(待修改)
- 远程连接“由于无法升级或重续本地计算机的客户端访问许可证,远程会话被中断的解决
- 应用回归分析第五版电子书_《应用回归分析-(第5版)》【价格 目录 书评 正版】_中国图书网...
热门文章
- Nginx基本数据结构之ngx_hash_keys_arrays_t
- 基于不同STM32库函数的代码性能对比
- go sync.WaitGroup源码分析
- Kafka史上最详细总结
- 如何提升springboot服务吞吐量
- Redis实战(二):Redis 的 String 类型 bitmap
- vb 如何给静态变量赋初值
- Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
- java高级用法之:调用本地方法的利器JNA
- JDK14性能管理工具:jmap和jhat使用介绍