所有,这些代码让我感到困惑:
arg_dict = conf.copy()
args = lambda var: arg_dict[var]
args.func_dict = arg_dict
我知道lambda的基础知识,但我不明白它在这里要做什么。
conf
是这样的预定义词典:
conf = {
"port": None,
"host": None,
"query": None,
"no_serve": None,
"no_load": None,
"debug": None,
}
答案 0 :(得分:4)
代码使用lambda
表达式创建一个函数对象,在调用时查找给定字典中的参数,和允许您将键作为属性查找。 conf
字典可能在此作为模板;它被复制,以便在为其分配更多键时不会修改原始文件。
这两行都将返回conf['debug']
:
args.debug
args('debug')
它还会将args
函数对象上的设置属性转换为为arg_dict
字典中的键设置值:
args.foo = 'bar'
转换为
args_dict['foo'] = 'bar'
那是因为函数的func_dict
属性构成了函数对象的属性名称空间。这通常是一个空字典,允许您在函数对象上设置任意属性。通过替换使用预定义的字典,您可以与函数体共享字典,以获得一些巧妙的技巧。
在{em>用户定义的函数下的Python datamodel中记录了func_dict
属性:
__dict__
,func_dict
支持任意函数属性的命名空间 可写
__dict__
是同一属性的另一个名称。
演示:
>>> conf = {
... "port": None,
... "host": None,
... "query": None,
... "no_serve": None,
... "no_load": None,
... "debug": None,
... }
>>> arg_dict = conf.copy()
>>> args = lambda var: arg_dict[var]
>>> args.func_dict = arg_dict
>>> args('debug')
>>> args.debug
>>> args.debug = 'bar'
>>> args('debug')
'bar'
>>> args.debug
'bar'