众所周知,在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注意事项相关推荐

  1. python变量使用前必须声明_python变量不需要声明吗

    Python中常见的数据类型有字符串,整形,列表,元组,字典等. 在Python语言中,声明变量的同时需要为其赋值,毕竟不代表任何值的变量毫无意义,Python语言中也不允许有这样的变量. 语法结构如 ...

  2. python内存管理 变量无需事先声明_python 内存管理

    内存管理 包括: 变量无须事先声明 变量无须指定类型 不用关心内存管理 变量名会被"回收" del 语句能够直接释放资源 变量定义 python中, 变量在第一次被赋值时自动声明, ...

  3. python中变量不需要事先声明_第二章 Python 变量

    2.1  Python变量 在 Python 中变量不需要事先声明变量名及其类型,直接赋值即可创建各种变量(不要使用关键字为变量名),例如: >>>x = 4 >>> ...

  4. python内存管理 变量无需事先声明_Python 快速入门

    一团网资讯 一团资讯 > python > Python 快速入门 Python 快速入门 2017-11-09 03:01:22     发布者:来源网络 1.Python语句中一些基本 ...

  5. python中int表示的数据类型是_python中的基本数据类型之 int bool str

    一.基本数据类型 1. int  ==>  整数.主要用来进行数学运算. 2.str  ==>  字符串.可以保存少量的数据,并进行相应的操作. 3.bool  =>  布尔值.判断 ...

  6. python跨函数调用变量_对python中不同模块(函数、类、变量)的调用详解

    首先,先介绍两种引入模块的方法. 法一:将整个文件引入 import 文件名 文件名.函数名( ) / 文件名.类名 通过这个方法可以运行另外一个文件里的函数 法二:只引入某个文件中一个类/函数/变量 ...

  7. python中的对象是什么意思_python中什么是对象

    详细内容 Python从设计之初就是一门面向对象的语言,它有一个重要的概念,即一切皆对象. Java虽然也是面向对象编程的语言,但是血统没有Python纯正.比如Java的八种基本数据类型之一int, ...

  8. python一个函数调用另一个函数中的变量_在Python 中同一个类两个函数间变量的调用方法...

    在Python 中同一个类两个函数间变量的调用方法 更新时间:2019年01月31日 15:44:54 作者:wxy_summer 今天小编就为大家分享一篇在Python 中同一个类两个函数间变量的调 ...

  9. python中find是什么意思啊_python中str的find()

    今天学习语法的时候发现字符串自带函数find和操作符in功能十分近似,几乎一模一样 if'a'inname: print'Yes, it contains the string "a&quo ...

最新文章

  1. 树莓派:人在太空,刚下火箭,诚招小于19岁的代码开发者
  2. 不愧是摸鱼高手Python matplotlib 绘制频谱图都会,能怪老板不管
  3. c++string类默认函数实现
  4. 如何使用图形界面Webmin管理linux服务器
  5. 【BZOJ 1528】 1528: [POI2005]sam-Toy Cars (贪心+堆)
  6. P5322-[BJOI2019]排兵布阵【背包】
  7. php7.2 event扩展php_sockets_le_socket错误解决
  8. 不得不看之跳槽加薪利器:2019需求最旺盛的十大IT技能
  9. 20172325 2018-2019-1 蓝墨云班课实验--哈夫曼树的编码
  10. 【wav音频解析】之wavread函数的C++实现
  11. 复现 ASPCMS企业建站系统Cookies欺骗漏洞
  12. 使用CUPS打印服务
  13. php 获取 ip 并根据 ip 获取地理位置
  14. Qt QImage scaled方法缩放中的问题
  15. 线性回归模型-最小二乘法Ordinary Least Squares
  16. Win11,MySQL8 安装教程。
  17. 熬夜再战Android之修炼Kotlin-为什么要搞她?
  18. 几种基本的数据结构(待修改)
  19. 远程连接“由于无法升级或重续本地计算机的客户端访问许可证,远程会话被中断的解决
  20. 应用回归分析第五版电子书_《应用回归分析-(第5版)》【价格 目录 书评 正版】_中国图书网...

热门文章

  1. Nginx基本数据结构之ngx_hash_keys_arrays_t
  2. 基于不同STM32库函数的代码性能对比
  3. go sync.WaitGroup源码分析
  4. Kafka史上最详细总结
  5. 如何提升springboot服务吞吐量
  6. Redis实战(二):Redis 的 String 类型 bitmap
  7. vb 如何给静态变量赋初值
  8. Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
  9. java高级用法之:调用本地方法的利器JNA
  10. JDK14性能管理工具:jmap和jhat使用介绍