Найти - Пользователи
Полная версия: Вычисление параметра по умолчанию
Начало » Python для новичков » Вычисление параметра по умолчанию
1
VlhOwn
Хочу написать функцию, выдающую индекс первого непустого элемента в списке или подсписке:

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), но как-то это некрасиво.

Budulianin
VlhOwn
beg=0,end=len(l)

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

Всё что нужно передавать в функцию - ссылка на список, с которым нужно работать.
VlhOwn
Извините, не понял, при чем тут итераторы.
Я хочу простой вещи:
вызывать nonzero(l), когда хочу найти индекс первого непустого элемента во всем списке l
вызывать nonzero(l,beg=5,end=10), когда ищу в
l[5:10]
.
Понятно, что можно
nonzero(l[5:10])
, но вот блажь такая …. долго объяснять.
doza_and
VlhOwn
что l не определено в выражении end=len(l).
Это надо вам читать про функции. Если коротко end=len(l) выполняется во время компиляции тела функции, а не при ее вызове. Так что смело первой строчкой ставьте if.
Budulianin
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, когда дефолтные значения
для параметров вычисляются динамически.
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