Python variable 作用域和初始化

Python 根据LEGB rule在不同的namespace中找变量

在def的函数中对global 变量做修改还是不推荐的,应该将其作为参数传入函数

try:
    do_something()
    cnt = 1
except Exception:
    clean_up(cnt)

try并不构成一个新的scope,所以cnt 在clean_up中是可以reference.

但是存在一个问题:

  如果在定义cnt之前就出现了exception, except clause里面的clean_up调用就会有问题。

对于这种情况是不是最好在try之前对cnt做一个初始化 然后在clean_up中去检查当前传进来的cnt

cnt = None

try:
...

def clean_up(cnt):
    if cnt is None:
        sys.exit(0)

我不知道这个是不是一个好方法。[待查]

时间: 2024-10-20 11:30:42

Python variable 作用域和初始化的相关文章

Python变量作用域

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

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

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

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中,如何初始化不同的变量类型为空值 常见的数字,字符,很简单,不多解释. 列表List的其值是[x,y,z]的形式 字典Dictionary的值是{x:a, y:b, z:c}的形式 元组Tuple的值是(a,b,c)的形式 所以,这些数据类型的变量,初始化为空值分别是: 数值 digital_value = 0 字符串 str_value = "" 或 str_value = ” 列表 list_value = [] 字典 ditc_value = {} 元组

python的作用域

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

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函数 -- 作用域,异常处理

1.def语句和参数 python定义函数的关键词为def,格式如下: def 函数名([变元],[变元],....)          #保存在变元中的值,在函数返回后该变元就会被销毁了. 2.返回值和return语句 renturn 函数应该返回的值或表达式            #如果使用表达式,返回值就是该表达式求值的结果 3.None值 在Python中有一个值称为None,它表示没有值.None是NoneType是数据类型的唯一值,None必须大写首字母N.如果你希望变量中存储的东西