700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > python 两个内置函数——locals 和globals(名字空间)批量以自定义变量名创建对象

python 两个内置函数——locals 和globals(名字空间)批量以自定义变量名创建对象

时间:2022-08-05 20:42:12

相关推荐

python 两个内置函数——locals 和globals(名字空间)批量以自定义变量名创建对象

文章目录

locals 和globals(名字空间)简介1、局部变量函数locals例子(locals 返回一个名字/值对的字典)批量创建对象示例1示例2函数内类内2、全局变量函数globals例子示例1示例2

locals 和globals(名字空间)简介

globals() 和 locals() 是作用于作用域下的内置函数

1.作用域相关:

1)globals() # 返回全局作用域中的所有名字2)locals() # 返回本地作用域中的所有名字

官方解释:

globals()——获取全局变量的字典

locals()——获取执行本方法所在命名空间内的局部变量的字典

全局变量就是作用在全局。也就是说整个.Py文件中。

而局部变量,在我们现在仅有的学习中,就是在一个函数内有效。

首先我们先在全局的情况下分别使用globals() 和 locals () 两个内置函数

print(globals())print(locals())

答案:

{'__name__': '__main__', '__doc__': None, '__package__': None ......}{'__name__': '__main__', '__doc__': None, '__package__': None ......}

首先我们先在局部的情况下分别使用globals() 和 locals () 两个内置函数

a = 2def func():b = 1print(globals())print(locals())func()

答案:

{'__name__': '__main__', '__doc__': None, '__package__': None, 'a' = 2 ......}{'b' = 1}

通过这两个例子,我们不难看出 ,globals()作用在全局,返回该作用域下的所有信息。

locals()作用在局部,返回该作用域下的所有信息。

区别是:globals() 无论将他放在全局还是局部它打印的都是全局作用域下的信息。而locals()是打印当前自己所在作用域的信息,在全局打印全局,在哪个位置的局部就打印哪个位置局部下的作用域信息。

以上引用自:解读Python中 locals() 和 globals() 内置函数

1、局部变量函数locals例子(locals 返回一个名字/值对的字典)

def foo(arg, a):x = 1y = 'xxxxxx'for i in range(10):j = 1k = iprint locals()#调用函数的打印结果foo(1,2)#{'a': 2, 'i': 9, 'k': 9, 'j': 1, 'arg': 1, 'y': 'xxxxxx', 'x': 1}

locals 是只读的,globals 不是?

批量创建对象

示例1

import pyrealsense2 as rsfor i in range(10):locals()['pipeline'+str(i)]=rs.pipeline()print(locals()['pipeline'+str(i)])print('查看名为pipeline0的对象:{}'.format(pipeline1))

结果:

<pyrealsense2.pyrealsense2.pipeline object at 0x0000025A31871AB0><pyrealsense2.pyrealsense2.pipeline object at 0x0000025A3182EEA0><pyrealsense2.pyrealsense2.pipeline object at 0x0000025A31880CE0><pyrealsense2.pyrealsense2.pipeline object at 0x0000025A31871BC8><pyrealsense2.pyrealsense2.pipeline object at 0x0000025A31871A08><pyrealsense2.pyrealsense2.pipeline object at 0x0000025A31871C00><pyrealsense2.pyrealsense2.pipeline object at 0x0000025A318712D0><pyrealsense2.pyrealsense2.pipeline object at 0x0000025A319F1F10><pyrealsense2.pyrealsense2.pipeline object at 0x0000025A31871AE8><pyrealsense2.pyrealsense2.pipeline object at 0x0000025A31871C38>查看名为pipeline0的对象:<pyrealsense2.pyrealsense2.pipeline object at 0x0000025A3182EEA0>

示例2
函数内

class A():def __init__(self):self.val = 10for i in range(10):locals()[f'x{i}'] = A()print(locals()[f'x{i}'])print(locals()[f'x{i}'].val)print('打印x1的值:{}'.format(x1.val))

结果:

<__main__.A object at 0x0000025A3180D080>10<__main__.A object at 0x0000025A3180D4A8>10<__main__.A object at 0x0000025A3180D9B0>10<__main__.A object at 0x0000025A31871F98>10<__main__.A object at 0x0000025A31871908>10<__main__.A object at 0x0000025A31871550>10<__main__.A object at 0x0000025A31871B70>10<__main__.A object at 0x0000025A31871358>10<__main__.A object at 0x0000025A31871CC0>10<__main__.A object at 0x0000025A317FE048>10打印x1的值:10

类内

class A():def __init__(self):self.val = 10class B():def __init__(self):for i in range(10):self.__dict__[f'x{i}'] = A()print(x1)print(type(x1))print(x1.val)

结果:

<__main__.A object at 0x0000025A3180D4A8><class '__main__.A'>10

2、全局变量函数globals例子

示例1

# -*- coding: utf-8 -*-"""@File : test6.py@Time : /3/26 9:18@Author : Dontla@Email : sxana@@Software: PyCharm"""def fun():globals()['a'] = 1fun()print(globals()['a'])

结果:

1

示例2

# -*- coding: utf-8 -*-"""@File : test6.py@Time : /3/26 9:18@Author : Dontla@Email : sxana@@Software: PyCharm"""class Bi:def fun(self):self.foo()def foo(self):globals()['a'] = 1Bi().fun()print(globals()['a'])

结果:

1

参考文章1:Python两个内置函数——locals 和globals (学习笔记)

参考文章2:python批量创建对象的方法

参考文章3:python批量创建对象

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。