【问题标题】:Returning a mutable object返回一个可变对象
【发布时间】:2018-05-20 00:03:52
【问题描述】:

我有一个关于性能的问题。 如果我将一个可变对象传递给一个函数并对该对象进行更改,我知道在 python 中它会更改值,并且所有指针都将指向已更改的值。 但是编写代码的正确方法是什么? 我是否应该使用return 语句并重新分配指向函数输出的指针,以向读取代码的人显示正在更改的代码?

如果将指针分配到它已经指向的同一内存,对性能的影响有多大?

谢谢!

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    是否应该使用 return 语句并重新分配指向函数输出的指针,以向读取代码的人显示它正在被更改?

    不,那会让它更加混乱。如果你要改变一个对象,你应该让它变得明显,并且让它变得明显的一部分是不返回相同的对象。以现有的 Python API 为灵感:

    >>> import random
    >>> a = [1, 2, 3]
    >>> random.shuffle(a)
    

    random.shuffle 没有返回任何东西,所以它唯一能做的就是将列表随机播放。

    性能在这里无关紧要。

    【讨论】:

    • 好答案。此外,OP 显然具有非常不同的编程背景。可变性,无论好坏,是 Python 语言和大多数 Python 软件的重要组成部分。
    【解决方案2】:

    a) 对性能没有显着影响。

    b) 如果你的函数接受一个对象并改变它,这是一个副作用,因此你不应该return那个对象。这会造成混淆和误导,因为它暗示输入与输出不同。

    c) 如果您认为应该编写无用的代码,只是为了向代码的读者提供信息,请改用 cmets。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      • 1970-01-01
      • 1970-01-01
      • 2015-06-06
      • 2017-07-12
      • 1970-01-01
      相关资源
      最近更新 更多