将对象属性(id)或完整对象作为参数传递

时间:2017-02-12 11:13:11

标签: python python-3.x

假设其属性中包含id的对象 假设只需要object.id来处理的通用函数(例如:从id从数据库中检索对象值)

在Python 3(内存方面或性能方面)中花费更多:

def my_function(self, id):
    do_stuff_with(id)

my_function(my_object.id)

def my_function(self, obj):
    do_struff_with(obj.id)

my_function(my_object)

我认为答案取决于语言实现,所以我想知道在Python 3中是否存在使用object作为参数的额外成本,因为我觉得它更灵活(想象一下,在此函数的下一个实现中,您还需要对象。名称,那么你不必修改签名)

1 个答案:

答案 0 :(得分:3)

在这两种情况下,都会将一个对象引用传递给该函数,我不知道其他实现是如何做到这一点的,但是,请C指向CPython的Python对象(因此需要相同的内存)那个电话)。

此外,在这种情况下的点查找没有区别,您可以在函数调用期间执行id的查找,也可以在正文中执行查找(实际上,属性查找不应该是一个问题)。

最后,它归结为更有意义的东西,传递对象并让函数按照它想要的方式执行它在概念上更好。正如你所说,它也更灵活,所以传递类实例。