Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 14, 2015 20:22:47

pristavskiyk
Зарегистрирован: 2015-01-30
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Заданные по дефолту значения в функциях

Здравствуйте! Помогите разобраться в проблеме.

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]

Отредактировано pristavskiyk (Июнь 14, 2015 20:29:26)

Офлайн

#2 Июнь 14, 2015 22:10:38

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Заданные по дефолту значения в функциях

mutable



————————————————
-*- Simple is better than complex -*-

Офлайн

#3 Июнь 15, 2015 05:50:49

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Заданные по дефолту значения в функциях

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



Офлайн

#4 Июнь 15, 2015 09:03:15

Vigi
От: Курья, Алтай
Зарегистрирован: 2015-02-07
Сообщения: 144
Репутация: +  8  -
Профиль   Отправить e-mail  

Заданные по дефолту значения в функциях

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

Офлайн

#5 Июнь 15, 2015 09:16:02

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Заданные по дефолту значения в функциях

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]
>>>



Офлайн

#6 Июнь 15, 2015 09:26:16

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Заданные по дефолту значения в функциях

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] []

Отредактировано Shaman (Июнь 15, 2015 10:00:52)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version