Python:我可以在不调用函数的情况下解压参数吗?

Python:我可以在不调用函数的情况下解压参数吗?,python,iterable-unpacking,argument-unpacking,Python,Iterable Unpacking,Argument Unpacking,我想将dict转换成几个不同的对象。例如: 目前有 kwargs={'this':7'that':'butterfly'} 我想转换它,可能使用类似于函数参数解包的东西,但不实际调用函数,因此我最终得到如下结果: 渴望的 **kwargs 打印(这个)#将打印出'7'` 打印(那个)#将打印出“蝴蝶”` 我知道我不能像我所展示的那样使用双星[***]。但我能做些类似的事情吗 编辑:更多细节 因为人们都在询问细节,并警告我所做的事情是危险的,所以我会为我的需要提供更多的背景 我想使用关键字

我想将
dict
转换成几个不同的对象。例如:

目前有
kwargs={'this':7'that':'butterfly'}

我想转换它,可能使用类似于函数参数解包的东西,但不实际调用函数,因此我最终得到如下结果:

渴望的
**kwargs
打印(这个)#将打印出'7'`
打印(那个)#将打印出“蝴蝶”`
我知道我不能像我所展示的那样使用双星[
***
]。但我能做些类似的事情吗


编辑:更多细节 因为人们都在询问细节,并警告我所做的事情是危险的,所以我会为我的需要提供更多的背景

我想使用关键字参数设置类中的属性。类似于什么是什么,但是解包
kwargs
而不是
args

作为一个功能玩具示例,它如下所示:


A类(对象):
定义初始化(自):
self.\u idx=无
@财产
def idx(自身):
返回自我
@idx.setter
def idx(自身,kwargs):
印刷品(kwargs)
self._idx={}
对于kw,以kwargs.items()表示的val:
自身_idx[kw]=val
这很有效。但是现在我正在对函数进行单元测试,在单元测试中,我希望能够提供特定的键值对作为普通对象,以便有效地使用
假设
pytest
@标记。有效地参数化

为了做到这一点,看起来我需要像上面描述的那样的“裸解包”

由于这些实际上都是方法中的局部变量,我觉得@g.d.d.c的关注点可能并不重要。听起来他担心的是,如果我在不知道全局变量是什么的情况下创建了新的全局变量。

注意:这种方法很危险。你不应该(在大多数情况下)胡乱使用
locals()
globals()
。然而,你想要的是可以做到的,比如:

>>> kwargs = {'this': 7, 'that': 'butterfly'}
>>> 
>>> locals().update(kwargs)
>>> this
7
>>> that
'butterfly'
它仍然调用一个函数(关于
locals()
的更新),但它确实在本地名称空间中为您提供名称。

注意:这种方法是危险的。你不应该(在大多数情况下)胡乱使用
locals()
globals()
。然而,你想要的是可以做到的,比如:

>>> kwargs = {'this': 7, 'that': 'butterfly'}
>>> 
>>> locals().update(kwargs)
>>> this
7
>>> that
'butterfly'
它仍然调用一个函数(关于
locals()
的更新),但它确实在本地名称空间中为您提供了名称。

您可以执行以下操作:

this,that={“this”:7,“that”:“butterfly”}.values()
但它确实是具体的。问题是,为什么一开始你的字典里有这些值

你好像把它们放在夸尔格,为什么你不能把它们放在那里

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

如果您知道dict中的键,为什么不简单地像这样展开它:

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

您能否向我们提供真实的用例,以便我们可以告诉您我们将如何做到这一点?

您可以做到:

this,that={“this”:7,“that”:“butterfly”}.values()
但它确实是具体的。问题是,为什么一开始你的字典里有这些值

你好像把它们放在夸尔格,为什么你不能把它们放在那里

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

如果您知道dict中的键,为什么不简单地像这样展开它:

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


您能否向我们提供真实的用例,以便我们告诉您我们将如何做到这一点?

Hi@g.d.d.c,我更新了问题以解决您的问题。知道所有的“动作”都发生在类方法内部,您还觉得这很危险吗?全局名称空间没有混乱,它仍然是绝对危险的。文件参考:。仅仅因为这是可能的并不意味着你应该这么做。嗨@g.d.d.c,我更新了这个问题来解决你的问题。知道所有的“动作”都发生在类方法内部,您还觉得这很危险吗?全局名称空间没有混乱,它仍然是绝对危险的。文件参考:。仅仅因为这是可能的并不意味着你应该这么做。嗨@Natim,我提供了更多的细节。无论如何,我需要以非硬编码的方式解包,所以这不起作用。正如我对g.d.d.c.所说的,我会找到另一种处理方法。嗨@Natim,我提供了更多细节。无论如何,我需要以非硬编码的方式解包,所以这不起作用。正如我对g.d.d.c.说的,我会找到另一种方法来处理它。你能提供你想写的测试吗?你能提供你想写的测试吗?