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

locals 和globals(名字空间)简介

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

1.作用域相关:

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

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

全局变量就是作用在全局。也就是说整个.Py文件中。
而局部变量,在我们现在仅有的学习中,就是在一个函数内有效。

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

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

答案:

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

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

a = 2
def func():
    b = 1
    print(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 = 1
	y = 'xxxxxx'
	for i in range(10):
		j = 1
		k = i
	print locals()
 
 
#调用函数的打印结果	
foo(1,2)
#{'a': 2, 'i': 9, 'k': 9, 'j': 1, 'arg': 1, 'y': 'xxxxxx', 'x': 1}

locals 是只读的,globals 不是?

批量创建对象
示例1
import pyrealsense2 as rs
for 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 = 10
for 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 = 10
 
class 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    : 2020/3/26 9:18
@Author  : Dontla
@Email   : sxana@qq.com
@Software: PyCharm
"""


def fun():
    globals()['a'] = 1


fun()
print(globals()['a'])

结果:

1
示例2
# -*- coding: utf-8 -*-
"""
@File    : test6.py
@Time    : 2020/3/26 9:18
@Author  : Dontla
@Email   : sxana@qq.com
@Software: PyCharm
"""


class Bi:
    def fun(self):
        self.foo()

    def foo(self):
        globals()['a'] = 1


Bi().fun()
print(globals()['a'])

结果:

1

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dontla

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值