Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从exec语句访问全局范围-受限python_Python_Scope - Fatal编程技术网

从exec语句访问全局范围-受限python

从exec语句访问全局范围-受限python,python,scope,Python,Scope,对不起,我知道这个问题有点具体 我正在尝试解决一个python难题,我输入的内容会得到exec'ed。我的目标是在全局名称空间中存储任意长度的内容(例如,更改变量target)。您将在下面看到,我的输入仅限于35个字符 节目如下: #/usr/bin/env蟒蛇2 从系统导入模块 模块。清除() del模 原始输入2=原始输入 例外2=例外 __内置命令清除() __内置\无 目标=无#更改此选项! 而1: 尝试: 作用域={'r':0} 范围中的exec'r='+raw_input2()[:

对不起,我知道这个问题有点具体

我正在尝试解决一个python难题,我输入的内容会得到
exec
'ed。我的目标是在全局名称空间中存储任意长度的内容(例如,更改变量
target
)。您将在下面看到,我的输入仅限于
35个字符

节目如下:

#/usr/bin/env蟒蛇2
从系统导入模块
模块。清除()
del模
原始输入2=原始输入
例外2=例外
__内置命令清除()
__内置\无
目标=无#更改此选项!
而1:
尝试:
作用域={'r':0}
范围中的exec'r='+raw_input2()[:35]
打印“结果:”,范围['r']
例外情况2除外,e:
打印“错误:”,e
如前所述,我的重点是将数据存储在某个地方,因为
vars
会重置每个循环

  • 我知道我可以使用
    globals()
  • 理论上我可以使用
    全局目标;target=xxx
    但它在
    范围内执行,而不是在全局范围内执行(我还认为
    全局
    关键字必须出现在匿名函数的开头)
  • 我知道所有变量都存储在某个
    \uuu dict\uuu
    对象中,但我知道写入它的唯一方法是通过禁用的
    globals()['target']=xxx
  • 我知道你可以痛苦地使用
    ()。\uuuu class\uuuuu.\uuuu base\uuuuuu
    访问超级对象,但是由于
    35个字符的限制,这似乎不是办法(这个字符串已经是
    21个字符了,你还需要两个字符才能开始
    0;
    ,所以只剩下
    11个字符来分配某物…)
有什么想法吗?
谢谢

答案是:写在
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

输入示例:

1;__builtins__['a']="string1"
Result: 1
1;__builtins__['a']+="string2"
。。。这实际上看起来很简单,因为它就在问题中标记为
#的变量上方。我还不完全理解为什么
\uuuu内置变量在
exec
范围内传递,特别是因为它应该是
None
(因此不是字典),但可以像字典一样赋值


但是它是有效的,在Python2.7中进行了测试,我认为没有办法逃脱
的范围
,获得真正的全局性。即使您设法导入了
\uuuu main\uuuu
,您也只能得到它的一份副本。好的,谢谢。但是如果我有权访问
globals()
,那是可行的吗?您认为我可以重新导入它吗?不,
globals()
将为您提供
scope
。没用的,我有点迷路了。我想
locals()
会给我本地范围,对应于
scope
。所以
globals()
不是。。。“全局”
范围中的exec cmd将
范围设置为
cmd
中任何命令的全局和本地范围。