Python:是否可以在不调用函数的情况下解压缩参数? 当前拥有所需

问题描述

我有dict想要转换为几个不同的对象。例如:

当前拥有

kwargs = {'this': 7,'that': 'butterfly'}

我想转换它,也许使用类似于函数参数解压缩的方式,但实际上没有调用函数,所以我最终得到的像是这样:

所需

**kwargs
print(this) # Will print out `7`
print(that) # Will print out `'butterfly'`

我知道我不能像显示的那样裸露双星[**]。但是我可以做些类似的事情吗?


编辑:更多细节

由于人们在询问细节并警告我要做的事很危险,所以我会为我的需要提供更多背景信息。

我要使用关键字参数设置的类中有一个属性。类似于shown here,但将kwargs而不是args拆包。

作为一个有效的玩具示例,它看起来像这样:


class A(object):
    def __init__(self):
        self._idx = None
    @property
    def idx(self):
        return self._idx
    @idx.setter
    def idx(self,kwargs):
        print(kwargs)
        self._idx = {}
        for kw,val in kwargs.items():
            self._idx[kw] = val

这有效。但是现在我正在对该功能进行单元测试,并且在单元测试中,我希望能够提供特定的键值对作为普通对象,以便我可以有效地使用hypothesispytest@mark.parametrize

为此,看来我将需要如上所述的“裸包”。

由于这些实际上都是方法中的局部变量,因此我觉得@ g.d.d.c所关心的问题可能并不重要。听起来好像他担心我是否要创建新的全局变量而不知道它们是什么。

解决方法

注意:这种方法是危险。您(在大多数情况下)不应混淆locals()globals()。但是,您可以完成以下操作:

>>> kwargs = {'this': 7,'that': 'butterfly'}
>>> 
>>> locals().update(kwargs)
>>> this
7
>>> that
'butterfly'

它仍然调用一个函数(locals()上的更新),但是它确实为您提供了本地命名空间中的名称。

,

您可以这样做:

this,that = {"this": 7,"that": "butterfly"}.values()

但这确实很具体。问题是,为什么首先要在字典中使用值。

您似乎把它们放在矮人之中,为什么不能将它们消耗在那里?

如果您不知道字典中的键,那么如何在代码中使用它们呢?

如果您知道字典中的键,为什么不像这样简单地将其扩展:

this,that = kwargs["this"],kwargs["that"]

我的最后一个问题是?为什么不在需要变量的地方使用kwargs["this"],尤其是在您不需要太多变量的情况下。

您能提供给我们真正的用例,以便我们告诉您我们将如何做吗?

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...