Python的作用域陷阱

问题发现:for循环内部的“局部”变量,在出现异常后,赋的变量仍有值可以输出。

每个循环都输出,发现没有重复。

结论:无for内的“局部”变量。

Python内的变量作用域,最小是以函数为单位。

之上是类,再是模块。

对于本问题,而输出没有重复,是因为出现异常后就跳出了赋值语句块,输出的设计不好。

实际上输出的值,是上次循环中赋的值。

时间: 2024-08-01 18:16:57

Python的作用域陷阱的相关文章

zg手册 之 python2.7.7源码分析(5)-- python的作用域和名空间

在 python 中, module,作用域,名空间这几个概念与虚拟机的运行机制有紧密的联系, 这里先了解 module,作用域,和名空间,为后面分析虚拟机的运行做准备. module 在python中一个文件对应是一个module,每个py文件被导入后都对应一个module对象. 这个对象包含有一个dict对象,保存着本py文件中对应的变量和函数的引用, 也保存从其他python文件(module)导入的变量或函数的引用. 名空间和作用域 python 有三个独立的名空间, local, gl

Python 模块 & 作用域

1        模块 在这部分,主要区分模块.包.多层目录. 请注意,每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包.__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是mycompany. 文件结构: mycompany   --包 __init__.py abc.py     --模块 xyz.py 1.1   使用模块 1.1.1 

Python变量作用域

Python对于作用域有四种:buildin作用域.全局作用域(模块作用域或文件作用域).高层函数作用域和局部作用域. 其中buildin作用域是Python内建作用域,在Python初始化时建立的: 全局作用域是在文件中直接定义的变量所处的作用域: 高层函数作用域是外层函数中定义的局部变量所处的作用域: 局部作用域是函数内部定义的局部变量所处的作用域: 而在Python语言中变量赋值的位置即是其变量所处的作用域. Python在查找一个变量时首先从局部作用域查起,若未找到则依次查找高层函数作用

麦子学院—python的潜在陷阱

本文主要是为新手介绍python的潜在陷阱,现在依次看看有哪些潜在的 Python 陷阱:推荐:Python网络编程实战视频(http://www.maiziedu.com/course/python/459-5958/)不知道Python版本这是一个在StackOverflow上反复出现的问题.许多人能写出在某个版本上完美工作的代码,但在他们在自己的系统上安装有不同版本的Python.要确保你知道你正在使用的Python版本.你可以通过下边的代码查看Python版本:$ python--ver

python的作用域

昨天我们科普了一点点关于区块链的小知识,你应该对区块链有一个大致的了解了吧? 好的,今天我们要来讲一下python的作用域.什么是python的作用域,其实说白了就是参数赋值的有效期到哪里,也就是字典的有效期,而这个字典通常是不会显示地出现在我们面前的,不显示?难道还能隐藏?对的,真的是隐藏起来了,我们来看一段示例代码: a = 1 LSF = vars() LSF['a'] #按回车,得到的结果是:1 LSF['a'] += 1 a #按回车,得到的结果是:2 我们来看一下上面 的代码,先是对

详解Python的作用域和命名空间

最近在学习Python,不得不说,Python真的是一门很好用的语言.但是学习的过程中关于变量作用域(scope)的命名空间(namespace)的问题真的把我给搞懵了.在查阅了相关资料之后,觉得自己对Python的作用域和命名空间有了一定得了解.故写在这里,一方面加深自己的理解,另一方面分享知识. 一.本篇博客需要解决的问题. 1.什么是作用域和命名空间? 2.Python中作用域和命名空间的工作原理是什么? 3.我怎样在Python中声明一个全局变量(global variable),局部变

Python 变量作用域 LEGB (下)—— Enclosing function locals

上篇:Python 变量作用域 LEGB (上)—— Local,Global,Builtin https://www.cnblogs.com/yvivid/p/python_LEGB_1.html 下篇 没想到 拖这么久,距离上篇完成 都一年多了. 一.闭包常规形态下的 locals作用域  典型的闭包 如下: def outer(x = 3): def inner(y): print("yvivid's test") print("Locals =", loca

[Python] 命名空间&作用域

Python的类语句不会创建实例 类会创建命名空间,通过对象访问类的属性和方法 类不会创建作用域,对方法和属性的引用必须加以限定(如在方法中必须通过self引用实例的属性) class My1(): my1 = "My1bianliang" def __init__(self): print("My1gouzao") def __del__(self): print("My1xigou") class My2(): def __init__(se

Python变量作用域(一)

在一个程序中使用变量名时,Python创建.改变或者查找变量名都是在所谓的命名空间中进行的.作用域指的就是命名空间. Python中的变量名在第一次赋值时已经创建,并且必须经过赋值后才能够使用.由于变量名最初没有声明,Python将一个变量名 被赋值的地点关联为一个特定的命名空间.也即是说,在代码中给一个变量赋值的地方决定了这个变量将存在于哪个命名空间,也 就是它可见的范围. 函数除了打包代码之外,还为程序增加了一个额外的命名空间曾:在默认的情况下,一个函数的所有变量名都是与函数的命名空间 相关