假设其属性中包含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作为参数的额外成本,因为我觉得它更灵活(想象一下,在此函数的下一个实现中,您还需要对象。名称,那么你不必修改签名)
答案 0 :(得分:3)
在这两种情况下,都会将一个对象引用传递给该函数,我不知道其他实现是如何做到这一点的,但是,请C
指向CPython
的Python对象(因此需要相同的内存)那个电话)。
此外,在这种情况下的点查找没有区别,您可以在函数调用期间执行id
的查找,也可以在正文中执行查找(实际上,属性查找不应该是一个问题)。
最后,它归结为更有意义的东西,传递对象并让函数按照它想要的方式执行它在概念上更好。正如你所说,它也更灵活,所以传递类实例。