我应该从函数显式返回列表吗?

2024-09-19 20:57:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在函数中做一些列表修改,然后在调用函数后继续使用修改后的列表,这是更好的方法:

def modify(alist):
    alist.append(4)
alist = [1,2,3]
modify(alist)
alist.append(5)

或者这个:

def modify(alist):
    alist.append(4)
    return alist
alist = [1,2,3]
alist = modify(alist)
alist.append(5)

第一句话是不是有点语调不好?你知道吗


Tags: 方法函数列表returndef调用函数append语调
3条回答

从函数返回列表是安全的。你知道吗

通常一个函数应该返回它生成的结果。但是,当您传递一个列表时,您要么需要复制该列表,要么接受它将被修改的事实;返回修改后的列表是多余的。如果提供默认参数,也会导致问题,因为默认参数也会被修改。你知道吗

我通常倾向于将参数设为只读,除非很明显它们会被修改。你知道吗

我的建议是:

def modify(alist=[]):
    alist = alist[:] # make a copy
    alist.append(4)
    return alist

由于您要在中修改列表,因此返回已修改的相同列表没有多大意义。你知道吗

您的inplace变异从引用传播list,因此最好省去return语句,如果函数中某个地方发生错误,而不是return修改的对象,则引发异常。你知道吗

There should be one-- and preferably only one --obvious way to do it.

相关问题 更多 >