Уведомления

Группа в Telegram: @pythonsu

#1 Июль 25, 2015 17:18:45

VlhOwn
От:
Зарегистрирован: 2011-09-26
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Вычисление параметра по умолчанию

Хочу написать функцию, выдающую индекс первого непустого элемента в списке или подсписке:

def nonzero(l,beg=0,end=len(l)):
     for i in range(beg,end):
         if l[i]: return i
но получаю сообщение, что l не определено в выражении end=len(l).
Задача - вызывать функцию с параметрами по умолчанию, когда поиск идет во всем списке, и с указанием границ, когда в подсписке.
Можно, конечно, сделать end=0, а перед циклом вставить if not end: end=len(l), но как-то это некрасиво.



Отредактировано VlhOwn (Июль 25, 2015 17:19:38)

Офлайн

#2 Июль 25, 2015 17:24:04

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Вычисление параметра по умолчанию

VlhOwn
beg=0,end=len(l)

Почитай, что такое итераторы и как в Python с ними работать.

Всё что нужно передавать в функцию - ссылка на список, с которым нужно работать.



Отредактировано Budulianin (Июль 25, 2015 17:25:27)

Офлайн

#3 Июль 25, 2015 17:36:53

VlhOwn
От:
Зарегистрирован: 2011-09-26
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Вычисление параметра по умолчанию

Извините, не понял, при чем тут итераторы.
Я хочу простой вещи:
вызывать nonzero(l), когда хочу найти индекс первого непустого элемента во всем списке l
вызывать nonzero(l,beg=5,end=10), когда ищу в

l[5:10]
.
Понятно, что можно
nonzero(l[5:10])
, но вот блажь такая …. долго объяснять.



Отредактировано VlhOwn (Июль 25, 2015 17:38:16)

Офлайн

#4 Июль 25, 2015 18:47:09

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Вычисление параметра по умолчанию

VlhOwn
что l не определено в выражении end=len(l).
Это надо вам читать про функции. Если коротко end=len(l) выполняется во время компиляции тела функции, а не при ее вызове. Так что смело первой строчкой ставьте if.



Офлайн

#5 Июль 25, 2015 19:32:44

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Вычисление параметра по умолчанию

VlhOwn
но вот блажь такая …. долго объяснять.

Ну ок.

def func(lst, start=0, end=None):
    if end is None:
        end = len(lst)
    for i in xrange(start, end):
        if lst[i]:
            return i
    return -1 

VlhOwn
но как-то это некрасиво.
Это обычное дело для функций в Python, когда дефолтные значения
для параметров вычисляются динамически.



Отредактировано Budulianin (Июль 25, 2015 19:36:09)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version