Discuss / Python / 我不改默认参数不就行了么?

我不改默认参数不就行了么?

Topic source

加肥猫

#1 Created at ... [Delete] [Delete and Lock User]

如下改代码即可,亲测可以。

def add_end(L=[]):
    #不是默认参数,可以修改
    if L !=[]:
        L.append('END')
        return L
    #默认参数,不修改直接返回['END']
    else:
        return ['END']

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]
>>> x=[]
>>> add_end(x)
['END']
>>> x
[]

Mumei

#3 Created at ... [Delete] [Delete and Lock User]

借楼问一下

当时我在定义函数的时候,写成了M = M.append('END')

后面空调用的时候不管几遍都是None

然后我发现M.append('END')这个用法,好像直接就是改变M这个变量里的值

并不会像那种别的函数调用一样,结果指向新的变量

那么我想知道是不是所有的

 “函数(变量)” 用法结果都会指向新的变量e.g. a=abs(x),而

 “变量.函数()” 用法结果都不会指向新变量e.g. [ ].pop(), [ ].append(), [ ].insert()

廖雪峰

#4 Created at ... [Delete] [Delete and Lock User]

你的理解是全错的,不要根据结果倒推原因。

你需要重新理解变量,函数,函数返回值,赋值这几个概念。

不重新赋值,变量是不可能变的。

Mumei

#5 Created at ... [Delete] [Delete and Lock User]

那也就是说,具体变量M里的值有没有变,只取决于有没有被赋新值。有些函数内部可能会对这个变量赋值,有些函数又不会对这个变量赋值,有些函数返回的是原来的变量,而有些函数返回的是新变量,所以不能一言以蔽之吗?


  • 1

Reply