Найти - Пользователи
Полная версия: Заданные по дефолту значения в функциях
Начало » Python для новичков » Заданные по дефолту значения в функциях
1
pristavskiyk
Здравствуйте! Помогите разобраться в проблеме.

def f(a, L=[]):
    L.append(a)
    return L

Почему в этой функции значение L сохраняется при последующих вызовах функции, если отсутствует второй аргумент?
>>> f(1)
[1]
>>> f(3)
[1, 3]
>>> f(5)
[1, 3, 5]
а если ее изменить вот так:

def f(a, L=None):
    if L is None:
        L = []
    L.append(a)
    return L

то при при вызовах функция начинает работать правильно, и значение L при последующих вызовах обнуляется?

>>> f(3)
[3]
>>> f(5)
[5]
>>> f(7)
[7]
terabayt
mutable
FishHook
def f(a, L=None):
    if L is None:
        L = []
    L.append(a)
    return L

ИМХО так будет чуть красивее
def f(a, l=None):
    l = l or []
    l.append(a)
    return l
Vigi
FishHook
ИМХО так будет чуть красивее

def f(a, l=None):
l = l or
l.append(a)
return l

ну если уж совсем губы красить то так:
def f(a, l=None or []):
    l.append(a)
    return l

py.user.next
Vigi
ну если уж совсем губы красить то так:
def f(a, l=None or []):
    l.append(a)
    return l

Вернулся в исходную точку.
>>> def f(a, l=None or []):
...     l.append(a)
...     return l
... 
>>> f(1)
[1]
>>> f(2)
[1, 2]
>>>
Shaman
def fa(a, L=None):
    if L is None:
        L = []
    L.append(a)
    return L
def fb(a, l=None):
    l = l or []
    l.append(a)
    return l
l = []
print fa(1, l), l
l = []
print fb(1, l), l

[1] [1]
[1] []
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB