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

com*_*mte 4 python python-3.x

假设有一个具有id其他属性的对象。
假设有一个只需要object.id处理的通用函数(例如:从 id 从数据库中检索对象值)

在 Python 3(内存方面或性能方面)执行以下操作是否花费更多:

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

    my_function(my_object.id)
Run Code Online (Sandbox Code Playgroud)

或者

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

    my_function(my_object)
Run Code Online (Sandbox Code Playgroud)

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

Jim*_*ard 5

在这两种情况下,对象引用都被传递给函数,我不知道其他实现是如何做到这一点的,但是,请考虑C指向 Python 对象的指针CPython(因此调用相同的内存)。

此外,在这种情况下,点查找没有任何区别,您要么id在函数调用期间执行查找,要么在主体内部执行查找(实际上,属性查找不应该是在意)。

最后,它归结为更有意义的事情,传递对象并让函数用它做它想做的事情在概念上更好。正如您所说,它也更灵活,因此请传递类实例。