python如何定义全局变量和局部变量_python在哪里存储全局和局部变量?

其中,Python只有“local”、“global”和“nonlocal”变量。在

其中一些存储在字典或类似字典的对象中,通常可以显式寻址。在

“全局”:实际上,“全局”变量相对于定义它们的模块是全局的-有时它们被称为“模块级”变量,而不是全局变量,因为在C语言中使用全局变量的大多数缺点都不适用,因为在使用模块级全局变量时,既不会有命名冲突,也不会知道某个名称是否来自某个名称。在

它们的值存储在字典中,作为module对象的“优dict_uuu”属性。需要注意的是,模块中的所有名称都是以这种方式存储的,因为Python中的名称指向对象的任何一种类型:也就是说,在语言级别上,模块中的“变量”、函数或类没有区别:所有这些对象的名称都将是“u dict_uu”特殊属性中的键,该属性由语言。是的,我们可以在运行时用通常的“setattr”插入或更改模块中变量所指向的对象,甚至可以直接更改模块的“uudict”。在

“local”:本地变量在“locals()”内置函数调用返回的字典中的“user code”中可用。此字典由正在运行的当前代码框架的“f_locals”属性引用。由于有多种方法可以检索调用当前运行代码的函数的代码框架,因此可以使用f_locals属性检索这些函数中可用变量的值,尽管在CPython实现中,更改f_locals字典中的值不会反映运行代码的实际变量值-这些值由字节码机制缓存。在

“非局部”变量是在函数内部定义的函数(或其他代码,如类主体)的情况下,函数内部对外部范围内定义的变量的特殊引用。它们可以在运行的代码中检索,方法是获取func_closure属性—它是“cell”对象的元组。例如,要检索函数对象内第一个非局部变量的值,可以执行以下操作:_

function.func_closure[0].cell_contents-值与变量名分开保存,变量名可以作为function.func_code.co_varnames检索。(此命名方案对python2.x有效)

底线是:变量“值”始终保存在与Python对象兼容并由虚拟机管理的对象中。这些数据中的一些可以通过自省以编程方式访问,有些数据是不透明的。(例如,通过自省,从拥有它们的函数内部检索非局部变量有点棘手)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值