【问题标题】:Python, Do I need to return an object that was passed in as parameter?Python,我是否需要返回作为参数传入的对象?
【发布时间】:2017-07-23 23:15:33
【问题描述】:

在编写一个接受可变对象的函数时,该对象可能会被改变,是否有必要将该对象返回给调用者?

我的意思是必要的......

  1. 是否有与此相关的特定 PEP 指南?
  2. 如果没有,Python 编程领域最常见的是什么?

一点代码:

def foo(args):
    args['a'] = 'new-value'
    args['b'] = args['b'] + 1

    # is there a need for a 'return args' ?

args = {'a': 'old-value', 'b': 99}
foo(args) # is there a need for args = foo(args)
print(args['a'], args['b']) # outputs new-value 100

“显式优于隐式。”让我觉得我应该让args 的潜力在主体中非常明确地改变,这样就不必查看函数来查看args 是否会改变......

【问题讨论】:

  • 我认为最好有回报,这样我就可以马上做print(foo(args))
  • 通常,修改对象的方法会返回None,除非返回其他东西有意义(例如,popitem)。不过我现在没有任何指针。
  • 返回一封来自 python 开发人员的相关邮件。不是 PEP,但还是很有趣:mail.python.org/pipermail/python-dev/2003-October/038855.html
  • 不是风格问题,我想说这不属于 PEP8

标签: python pep8 pep


【解决方案1】:

这不是任何 PEP 所涵盖的,这完全取决于作者的风格。不过,通常在 API 设计中,改变参数的方法不会返回任何东西,所以你不会忘记你正在改变东西。这种设计要非常小心。

【讨论】:

    【解决方案2】:

    就python中更常见的情况而言,有一些例子是传递的对象被改变了。这些往往是要修改的对象的方法(例如list.append,其中 list 是一种类型),但大多数函数倾向于获取传递的对象的副本并返回一个新对象(例如 string.strip,其中 string 是模块string)。

    这当然也带来了str.strip,它也是一个str类型对象的方法,它返回一个新对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      • 2021-08-21
      • 2017-04-19
      相关资源
      最近更新 更多