为了从字面上获取你要求的东西,你不得不用你档案的yn树dle。 我不认为这样做是可取的,但我不能抵制尝试的诱惑。 因此,我们来到这里。
首先,我们创建了一个功能为my_execfile()
的模块,该模块像在execfile(
>中建立,但所有词汇显示的出现,例如{3:4,“a”: 2}
,由以下明确电话取代:dict(<>/code>>,例如。 (当然,我们可以通过电话<代码>采集直接取而代之。) OrderedDict(
,但我们不想过分侵扰。 该法典:
import ast
class DictDisplayTransformer(ast.NodeTransformer):
def visit_Dict(self, node):
self.generic_visit(node)
list_node = ast.List(
[ast.copy_location(ast.Tuple(list(x), ast.Load()), x[0])
for x in zip(node.keys, node.values)],
ast.Load())
name_node = ast.Name("dict", ast.Load())
new_node = ast.Call(ast.copy_location(name_node, node),
[ast.copy_location(list_node, node)],
[], None, None)
return ast.copy_location(new_node, node)
def my_execfile(filename, globals=None, locals=None):
if globals is None:
globals = {}
if locals is None:
locals = globals
node = ast.parse(open(filename).read())
transformed = DictDisplayTransformer().visit(node)
exec compile(transformed, filename, "exec") in globals, locals
有了这一修改,我们can<>>>>> /em>修改了字典显示器的行为,改写了<条码>。 例如:
# test.py
from collections import OrderedDict
print {3: 4, "a": 2}
dict = OrderedDict
print {3: 4, "a": 2}
现在,我们可以使用<代码>my_execfile(”test.py”管理这一档案,得出产出。
{ a : 2, 3: 4}
OrderedDict([(3, 4), ( a , 2)])
Note that for simplicity, the above code doesn t touch dictionary comprehensions, which should be transformed to generator expressions passed to the dict()
constructor. You d need to add a visit_DictComp()
method to the DictDisplayTransformer
class. Given the above example code, this should be straight-forward.
我再说一遍,我不建议用这种语调。 页: 1 ConfigParser model?