python中命名空间中的exec类_定义

python中命名空间中的exec类_定义,python,namespaces,namedtuple,Python,Namespaces,Namedtuple,这个代码片段在python中被命名为collections模块的tuple函数。当我看到它时,我不理解它。class_定义是格式化的字符串,namespace是dict,exec可以编写ogject或string等,exec class_定义在namespace中如何影响namespace,exec生成什么?我在Python3上这样做,但在Python2上的原则是相同的 说你在执行死刑 FooBarBaz = namedtuple('FooBarBaz', 'foo bar baz') 在本例

这个代码片段在python中被命名为collections模块的tuple函数。当我看到它时,我不理解它。class_定义是格式化的字符串,namespace是dict,exec可以编写ogject或string等,
exec class_定义在namespace中如何影响namespace,exec生成什么?

我在Python3上这样做,但在Python2上的原则是相同的

说你在执行死刑

FooBarBaz = namedtuple('FooBarBaz', 'foo bar baz')
在本例中,此代码

class_definition = _class_template.format(
    typename = typename,
    field_names = tuple(field_names),
    num_fields = len(field_names),
    arg_list = repr(tuple(field_names)).replace("'", "")[1:-1],
    repr_fmt = ', '.join(_repr_template.format(name=name)
                         for name in field_names),
    field_defs = '\n'.join(_field_template.format(index=index, name=name)
                           for index, name in enumerate(field_names))
)
使用
str.format
填充类模板,将
class_定义设置为字符串,其内容为:

现在,代码创建了一个新字典,用作
exec
的全局命名空间:

namespace = dict(__name__='namedtuple_%s' % typename)
我们不使用空字典的原因是,如果有任何跟踪程序会打印出当前模块的
\uuuu name\uuuu
,那么它会发现
\uuu name\uuuuuu
设置为
namedtuple\ufoobarbaz

然后,我们从字符串执行类定义,全局范围作为这个字典

exec(class_definition, namespace)
基本上,这将执行上面的类定义,该类定义了一个新的模块全局变量
FooBarBaz
,该变量存储在
名称空间
字典中,然后可以通过以下方式获取:

result = namespace[typename]   # namespace['FooBarBaz']
现在,
result
是我们新创建的类;然后,为了让它在酸洗过程中幸存下来,进行了一些巫术操作,然后返回类

这段代码可以再次将其分配给变量FooBarBaz:

FooBarBaz = namedtuple('FooBarBaz', 'foo bar baz')

你能添加代码片段吗?我不是故意的,但是你应该编辑你的问题,提高你的写作质量。就目前而言,我很难理解你在说什么……你是说第236-388行的namedtuple的源代码吗?@karisankedy请用英语解释。
FooBarBaz = namedtuple('FooBarBaz', 'foo bar baz')