Python 实例“\uuu dict\uuu”的关键字参数解包有哪些陷阱?
我试图方便地将一些参数集传递给一些函数,比如20 考虑下面的MWE,当然,我并不真的认为这样做增加:Python 实例“\uuu dict\uuu”的关键字参数解包有哪些陷阱?,python,arguments,argument-unpacking,Python,Arguments,Argument Unpacking,我试图方便地将一些参数集传递给一些函数,比如20 考虑下面的MWE,当然,我并不真的认为这样做增加: def function(a, b): return a + b class summation: def __init__(self, a, b): self.a = a self.b = b s = summation(1,2) function(**s.__dict__) 我尝试这样做的原因是我有一堆函数,它们都接收4个相同的参数
def function(a, b):
return a + b
class summation:
def __init__(self, a, b):
self.a = a
self.b = b
s = summation(1,2)
function(**s.__dict__)
我尝试这样做的原因是我有一堆函数,它们都接收4个相同的参数,我需要在管道中处理它们,从一个函数传递到另一个函数
暗示s总是只有相关字段是传递参数的好方法吗?直接这样做
这里是[11:35-26:00]
这完全是为了你
这里是[11:35-26:00]
一般来说,使用obj是个坏主意。因为对象字典不包含任何描述符或对象上可能存在的其他神奇属性。它还将包括按照惯例隐藏在uu前缀后面的隐藏属性。因此,obj.\uuu dict\uuuu技术实际上只适用于完全基本的类型,如果您决定将任何属性更新为属性以便可以控制它们的getter/setter等,则它不是未来的证明。varsobj也有同样的问题 类矩形对象: x=0 y=0 _宽度=0 高度=0 @财产 自我定义: 返回自我宽度 @宽度设定器 定义宽度自身,值: 如果值<0: 值=-值 self.x-=值 自身宽度=值 >>>r=矩形 >>>条例草案__ {} >>>这是因为到目前为止,所有内容都是类级属性 >>>r.宽度=50 >>>条例草案__ {“U宽度”:50}
一般来说,使用obj是个坏主意。因为对象字典不包含任何描述符或对象上可能存在的其他神奇属性。它还将包括按照惯例隐藏在uu前缀后面的隐藏属性。因此,obj.\uuu dict\uuuu技术实际上只适用于完全基本的类型,如果您决定将任何属性更新为属性以便可以控制它们的getter/setter等,则它不是未来的证明。varsobj也有同样的问题 类矩形对象: x=0 y=0 _宽度=0 高度=0 @财产 自我定义: 返回自我宽度 @宽度设定器 定义宽度自身,值: 如果值<0: 值=-值 self.x-=值 自身宽度=值 >>>r=矩形 >>>条例草案__ {} >>>这是因为到目前为止,所有内容都是类级属性 >>>r.宽度=50 >>>条例草案__ {“U宽度”:50}
@thg435只是不知道而已。它是不是意味着对象的“黑客式”版本要少一些。dict?你可以设置变量模块级别,如果你把它们传递给这么多人的话functions@thg435只是不知道而已。这是不是意味着对象的“黑客式”版本要少一些呢?\uuuuu dict\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo?如果你要将变量传递给这么多函数,你可以a@Constantius您可以*解包namedtuples。我将进行编辑来描述。我不想用全名nt.a访问该字段,而只是a@Constantius您可以*解包namedtuples。我会做一个编辑来描述。对不起,我不明白你的问题在我的答案中的含义。你的问题意味着你只是想知道陷阱。对不起,在我的回答中,我不理解你的问题。你的问题意味着你只是想知道陷阱。一般来说,你应该包括一些关于你的代码如何解决这个问题的解释。在这个特殊的例子中,考虑到问题是什么,我不认为没有解释的几行代码可能是一个答案。一般来说,您应该包括一些关于代码如何解决问题的解释。在这个特殊的例子中,考虑到问题是什么,我看不出没有解释的几行代码怎么可能是答案。
from collections import namedtuple
Add = namedtuple("Add", "a b c d")
one = Add(1, 2, 3, 4)
def addme(a, b, c, d):
print a + b
print c + d
>>> addme(*one)
... 3
... 7
for attribute, attribute_value in obj.__dict__.items(): # or obj.__dict__.iteritems()
print attribute, attribute_value