python3 exec locals()

python3 exec locals()

起因

因为需要一边调试写python脚本, 一边在interpeter里面测试,但import只能导入一次,所以想要用execfile,但是python3没有这个函数,官方的推荐是exec(open(path).read()),但是这样要写好长.于是,想要自己写一个

经过

自己写出的代码是这样的.

def execfile(path):
    '''
    execute file in local scope and then add local new added variables to globals.
    '''
    ori=locals().copy()
    with open(path) as f:
        exec(f.read())
    del f
    loc=locals()
    del loc['ori']
    for i in loc:
        if not i in ori:
            globals()[i]=loc[i]

由于需要将exec加入到局部域中的变量,加入到全局域中,所以有了这样的代码,但是当使用这个函数加载某脚本的时候,发生了错误.
加载的脚本抽象如下:

def a():
	return 0

def b():
	return a
b()

然后就报错了.然后搜了一下,果然在stackoverflow上有说.
就是说execlocals()是不"打算"修改并且修改的行为是和globals()不同的.可以认为locals()是没有被修改的,但是其中有一些相当微妙的东西.

比如,如下代码

def foo():
	exec('''
def a():
	pass''')
	def b():
		pass
	print(locals())

foo()

的输出结果

{'a': <function a at 0x000001790A5392F0>, 'b': <function foo.<locals>.b at 0x000001790A539268>}

至于如何微妙我就不懂了.

结果

结果就是我知道了exec的两个参数,所以,我最后的execfile函数改成

def execfile(path):
    with open(path) as f:
        exec(f.read(),globals())

就行了.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值