Python:将args转换为字典,类似于PHP的compact?
我想要一个和PHP的compact函数完全一样的功能。
也就是说,如果我传入一组变量名:
compact('var1','var2')
它会返回给我一个字典:
{'var1':var1, 'var2':var2}
8 个回答
1
(1) Python和PHP是两种不同的编程语言。 (2) “当变量传入函数时会丢失变量名”这个说法是对的。
不要用变量来处理这个问题。
做一些简单的事情。使用dict
函数。
>>> dict( var1=1, var2='a', var3=1+3j )
{'var1': 1, 'var3': (1+3j), 'var2': 'a'}
这样做似乎能达到你想要的效果。变量“names”在这里只出现一次。你其实不需要再创建其他本地的临时变量。
3
调用函数时使用的变量名在被调用的函数里并不容易获取。虽然可能通过一些高级技巧使用 inspect
来实现,但可能更好的是重新考虑一下你为什么需要这些变量名。
更新:现在我知道你真正的需求是什么(“我想把我的变量传递给模板”),答案很简单:使用 locals()
,它会返回一个字典,里面映射了你所有的局部变量名和它们的值。
更新 2:那这样怎么样?:
def only(d, *keys):
"""Return the subset of dict `d` whose keys are in `keys`."""
return dict((k,v) for k,v in d.iteritems() if k in keys)
...
a = 17
b = 23
template_data = only(locals(), "a", "b")
1
>>> import inspect
>>> def compact(*args):
... d = {}
... for a in args:
... d[a] = inspect.stack()[1][0].f_locals[a]
... return d
...
>>> def test():
... x = 5
... print compact('x')
...
>>> test()
{'x': 5}
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。