python中命名空间中的exec类_定义
这个代码片段在python中被命名为collections模块的tuple函数。当我看到它时,我不理解它。class_定义是格式化的字符串,namespace是dict,exec可以编写ogject或string等,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') 在本例
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')