Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数,该函数返回python中的参数字典_Python_Python 2.7_Dictionary_Args_Keyword Argument - Fatal编程技术网

函数,该函数返回python中的参数字典

函数,该函数返回python中的参数字典,python,python-2.7,dictionary,args,keyword-argument,Python,Python 2.7,Dictionary,Args,Keyword Argument,函数func(*args,**kwargs)应返回字典,该字典的所有元素应为数值或字符串变量。 若函数的参数是dictionary,那个么函数应该返回dictionary以及参数dictionary的所有元素和其他参数。 例如: arg1 = { 'x': 'X', 'y': 'Y' } arg2 = 2 arg3 = { 'p': arg1, 'pi': 3.14 } func(arg2, arg3, arg4=4) 应将此邮件退回: { 'x': 'X', 'y': 'Y', 'arg

函数
func(*args,**kwargs)
应返回字典,该字典的所有元素应为数值或字符串变量。 若函数的参数是dictionary,那个么函数应该返回dictionary以及参数dictionary的所有元素和其他参数。 例如:

arg1 = { 'x': 'X', 'y': 'Y' }  
arg2 = 2
arg3 = { 'p': arg1, 'pi': 3.14 }
func(arg2, arg3, arg4=4)
应将此邮件退回:

{ 'x': 'X', 'y': 'Y', 'arg2': 2, 'pi': 3.14, 'arg4': 4 }

怎么做?递归是不可取的。

当您将arg2传递给函数时,函数在传入它时不知道它的名称是arg2,它只知道它的值是2。您必须获取堆栈跟踪以了解是谁调用了该函数,然后从源代码中获取名称,这样就很简单了

但如果我这样称呼它呢:

func(2)

那么您希望得到什么样的输出呢?

您可以这样做,但该解决方案需要参数编号递增(arg1、arg2、…、argN)

返回:

{'x': 'X', 'y': 'Y', 'arg2': 2, 'p': {'x': 'X', 'y': 'Y'}, 'pi': 3.14, 'arg4': 4}

函数
func(*args)
将无法确定并返回名称
arg2
!arg3的p键丢失了吗?@Tbaki它没有丢失,arg3是字典,所以我们必须深入了解arg3中是否有数字或字符串元素。@deceze有一个locals()函数可以确定参数的名称,我错了吗?不,
locals
对您没有帮助。只有一堆痕迹可以,但为了所有神圣的爱,请不要去那里。“然后它会很简单”——对于“简单”的特殊定义…ಠ_ಠ我是python新手,所以不要怪我。若as*args只能提供字典呢?阅读关于类dict的更新方法:这不是我一直关注的。莫里斯给出了简单的解决方案,非常接近。还有一件事我想说的是带有键
'p'
unpackage的元素。只有当它们的值相同时,同名变量才应在
myDict
中,如果不是这样,则两者都不应存在。这应该在将参数传递给函数之前完成。。。我的意思是,当你创建arg变量时。
{'x': 'X', 'y': 'Y', 'arg2': 2, 'p': {'x': 'X', 'y': 'Y'}, 'pi': 3.14, 'arg4': 4}