Python:将args转换为字典,类似于PHP的compact?

2 投票
8 回答
1241 浏览
提问于 2025-04-16 00:21

我想要一个和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}

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

撰写回答