2015-03-02 2 views
0

Итак, вот кусок кода:аргументы по умолчанию в функции - Python

def function(item, stuff = []): 
    stuff.append(item) 
    print stuff 

function(1) 
# print '[1]' 

function(2) 
# print '[1,2]' 

Как я понял, это показывает, что значения по умолчанию, изменены во время выполнения программы все еще изменилось в каждой функции вызовов. Но почему этот фрагмент кода:

def function(item, stuff = 0): 
    stuff += item 
    print stuff 

function(3) 
function(3) 

отпечатки «3» на каждом прогоне?

+0

Похоже, что 'stuff' повторно инициализируется при каждом вызове. – CompanyDroneFromSector7G

ответ

2

Списки в Python: mutable: Они могут быть изменены после их создания. Вот почему список stuff растет, когда вы вызываете первую функцию, это один и тот же объект списка каждый раз.

С другой стороны, целые числа: неизменяемый. Вы не можете изменить их после их создания. Так что это делает

a = 2 
a += 1 

это удалить a наклейку с «2» объекта и присоединить его к «3» вместо объекта.

Именно поэтому объект «0» (значение по умолчанию для аргумента stuff второй функции) остается неизменным, и вы получаете 3 раза каждый раз.

Смежные вопросы