python 中locals() 和 globals()

1、locals() 和 globals() 是python 的内建函数,他们提供了字典的形式访问局部变量和全局变量的方式。

示例代码:

 1 def test(arg):
 2     a=1
 3     b=2
 4     data_dict = {}
 5     print locals()
 6     print globals()
 7
 8
 9 if __name__ == ‘__main__‘:
10     test(3)

输出为:

1 {‘a‘: 1, ‘data_dict‘: {}, ‘b‘: 2, ‘arg‘: 3}
2 {‘__builtins__‘: <module ‘__builtin__‘ (built-in)>, ‘__file__‘: ‘F:/work/workspace/pythonWorkspace/learn/locals_globals.py‘, ‘__package__‘: None, ‘test‘: <function test at 0x0239F830>, ‘__name__‘: ‘__main__‘, ‘__doc__‘: None}

2、locals() 返回是当前局部变量的深拷贝,修改locals() 中变量值的时候,实际上对于原变量本身是没有任何影响的。而globals()返回的是全局变量的字典,修改其中的内容,值会真正的发生改变。

示例代码:

 1 b = 5 # 定义一个全局变量
 2 def test2():
 3     a=1
 4     locals()["a"] = 2  # 修改局部变量
 5     print "a=", a
 6     globals()["b"] = 6 # 修改全局变量
 7     print "b=", b
 8
 9 if __name__ == ‘__main__‘:
10     test2()

输出为:

a= 1
b= 6
时间: 2024-10-07 05:06:27

python 中locals() 和 globals()的相关文章

python中的作用域以及内置函数globals()-全局变量、locals()-局部变量

在python中,函数会创建一个自己的作用域,也称为为命名空间.这意味着在函数内部访问某个变量时,函数会优先在自己的命名空间中寻找. 通过内置函数globals()返回的是python解释器能知道的变量名称的字典(变量名:值): 而locals()函数返回的是函数内部本地作用域中的变量名称字典.由此可以看出,函数都是由自己独立的命名空间的. 查看全局变量和局部变量: #coding=utf-8 outerVar="this is a global variable"def test()

016.Python闭包函数以及locals和globals

一 闭包函数 内函数使用了外函数的局部变量,并且外函数把内函数返回出来的过程叫做闭包,这个内函数叫做闭包函数 1.1 闭包函数语法 def outer(): a = 5 def inner(): print(a) return inner 对比正常的局部变量 局部变量的生命周期最短,在调用结束之后,立即释放. def func(): a = 5 print(a) func() print(a) 执行 1.2 闭包函数的定义 def bibao(): people = "孙仲谋" def

Python中__builtin__和__builtins__的深入探讨

0.说明 这里的说明主要是以Python 2.7为例,因为在Python 3+中,__builtin__模块被命名为builtins,下面主要是探讨Python 2.x中__builtin__模块和__builtins__模块的区别和联系. 1.名称空间(Namespace) 首先不得不说名称空间,因为名称空间是Python中非常重要的一个概念,所谓名称空间,其实指的是名称(标识符)到对象的映射. 在一个正常的Python程序的执行过程中,至少存在两个名称空间: 内建名称空间 全局名称空间 如果

python中的内建函数(BIF)

BIF(built-in functions) 顾名思义,就是Erlang内建函数.它们通常用来完成那此无法用Erlang完成的任务.比如将列表转换为元组或者获取当前 的时间和日期.完成这些操作的函数,我们称之为BIF.python中提供了大量的内置功能函数,这就意味着你可以少些很多的代码. 我们可以在python或IDLE shell中,键入dir(__builtins__)可以看到python的内置方法列表,"builtins"的前后都是两个下划线,shell会给出一个 庞大的列表

装饰器、生成器、迭代器、及python中内置函数的使用

一. 装饰器 1. 装饰器的概述 (1)概述:装饰器本质就是函数,主要用来装饰其他函数,为其他函数添加附加功能. (2)使用装饰器的原则 1)不能修改被装饰的函数的源代码 2)不能修改被装饰的函数的调用方式 (3)装饰器原理:函数即"变量".高阶函数.嵌套函数 2.使用装饰器的原因 (1)传统的多个函数模块修改需要同时修改多个函数.如果函数过多,则修改不方便. 如下,如果想要在每个函数中开头结尾分别输入内容,则需要在每个函数开头结尾加入需要输出的内容. def f1():     pr

Python中的eval()、exec()及其相关函数

Python中的eval().exec()两个函数以及与它们相关的几个函数,如globals().locals()和compile(): 1. eval函数 函数的作用: 计算指定表达式的值.也就是说它要执行的Python代码只能是单个运算表达式(注意eval不支持任意形式的赋值操作),而不能是复杂的代码逻辑,这一点和lambda表达式比较相似. 函数定义: eval(expression, globals=None, locals=None) 参数说明: expression:必选参数,可以是

Python中动态创建类实例

Python中动态创建类实例 简介 在Java中我们可以通过反射来根据类名创建类实例,那么在Python我们怎么实现类似功能呢? 其实在Python有一个builtin函数import,我们可以使用这个函数来在运行时动态加载一些模块.如下: def createInstance(module_name, class_name, *args, **kwargs): module_meta = __import__(module_name, globals(), locals(), [class_n

python中的namespace

python中的名称空间是名称(标识符)到对象的映射. 具体来说,python为模块.函数.类.对象保存一个字典(__dict__),里面就是重名称到对象的映射. 可以参看下面python程序的输出: print('globals:') print(globals().keys()) print('') x = 1 print('globals after definition of x:') print(globals().keys()) print('') if x == 1: y = 2

Python中eval带来的潜在风险

0x00 前言 eval是Python用于执行python表达式的一个内置函数,使用eval,可以很方便的将字符串动态执行.比如下列代码: >>> eval("1+2") 3 >>> eval("[x for x in range(10)]") [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 当内存中的内置模块含有os的话,eval同样可以做到命令执行: >>> import os >>