Понимание функции интервала и ее параметров в примере книги python Hetland - PullRequest
3 голосов
/ 08 февраля 2020

Получил этот пример функции из книги python Хетланда.

def interval(start, stop=None, step=1):
    if stop is None:
        start, stop=0, start
    result = []

    i = start
    while i < stop:
        result.append(i)
        i += step
    return result

Что оба начинают делать в операторе if? И почему это там дважды? Я изменил последнее начало на int, и это изменило длину моего списка на это int.

Я также не могу обернуть голову вокруг интерактивной части. В этом примере start = 10. Таким образом, при итерации ... при 10 <0 он будет продолжать увеличивать список, увеличивая счетчик на шаг = 1 каждый раз. Но 10 - это не меньше 0. Как все прошло? </p>

1 Ответ

7 голосов
/ 08 февраля 2020

Назначение должно быть проанализировано как

(start, stop) = (0, start)

То есть interval(10) эквивалентно interval(0, 10). Хотя первый параметр name равен start, это действительно значение stop, если указан только один аргумент.

while l oop эквивалентно более прямолинейный for l oop

for i in range(start, stop + 1, step):
    result.append(i)

, за исключением interval позволяет start, stop и step все имеют типы, отличные от int.


Лучшим дизайном может быть требование использования аргументов только для ключевых слов, чтобы в теле функции не было неоднозначности в том, как используется каждый параметр:

def interval(*, start=0, stop, step=1):
    result = []
    while start < stop:
        result.append(start)
        start += step
    return result

Теперь вы можете вызывать interval(stop=10) или interval(start=3, stop=10); В любом случае, параметр start фактически является начальным значением в обоих случаях. Однако это компромисс в том, что вы больше не можете писать interval(10) для того, что можно ожидать в качестве наиболее распространенного варианта использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...