我正在努力增强我的Python技能,我遇到了使用types.FunctionType的Saltstack的开源代码,我不明白发生了什么.
函数create()有以下代码:
kwargs = {
'name': vm_['name'],
'image': get_image(conn, vm_),
'size': get_size(conn, vm_),
'location': get_location(conn, vm_),
}
Run Code Online (Sandbox Code Playgroud)
函数get_image和get_size传递给函数'namespaced_function',如下所示:
get_size = namespaced_function(get_size, globals())
get_image = namespaced_function(get_image, globals())
Run Code Online (Sandbox Code Playgroud)
具有命名空间功能
def namespaced_function(function, global_dict, defaults=None, preserve_context=False):
'''
Redefine (clone) a function under a different globals() namespace scope
preserve_context:
Allow keeping the context taken from orignal namespace,
and extend it with globals() taken from
new targetted namespace.
'''
if defaults is None:
defaults = function.__defaults__
if preserve_context:
_global_dict = …Run Code Online (Sandbox Code Playgroud)