当编写一个接受可更改对象的函数时,是否需要将此对象返回给调用者?
必要时我的意思是......
一点代码:
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
是否可能被更改......
答案 0 :(得分:2)
任何PEP都没有涵盖这一点,这完全取决于作者的风格。通常在API设计中,改变参数的方法不会返回任何内容,所以你不要忘记你是在改变事物。对这种设计要非常小心。
答案 1 :(得分:0)
就python中更常见的东西而言,有一些例子表明传递的对象被改变了。这些往往是要修改的对象的方法(例如list.append
,其中list是一个类型),但是大多数函数倾向于获取传递的对象的副本并返回一个新的(例如string.strip,其中string是模块string
)。
这当然也会调出str.strip
,它也是一个返回新对象的str
类型对象的方法。