2015-12-02 3 views
2

В упражнении 39 Learn Python жесткий путь (http://learnpythonthehardway.org/book/ex39.html), следующие функции определены (get_slot() и get()):Learn Python на EX39 Hard Way

def get_slot(aMap, key, default=None): 
    """ 
    Returns the index, key, and value of a slot found in a bucket. 
    Returns -1, key, and default (None if not set) when not found. 
    """ 
    bucket = get_bucket(aMap, key) 

    for i, kv in enumerate(bucket): 
     k, v = kv 
     if key == k: 
      return i, k, v 
    return -1, key, default 

def get(aMap, key, default=None): 
    """Gets the value in a bucket for the given key, or the default.""" 
    i, k, v = get_slot(aMap, key, default=default) 
    return v 

Зачем писать default=default при вызове get_slot()?

Мне кажется, что достаточно просто позвонить get_slot() с «default»? ->get_slot(aMap, key, default)

Является ли default=default чем-то связанным с параметрами позиционной функции с именем vs? (как обсуждается здесь: http://pythoncentral.io/fun-with-python-function-parameters/) или default=default сделано по другой причине полностью?

+4

В этом случае это одно и то же, но, как правило, хорошая практика (безопаснее) также использовать имена аргументов ключевого слова, даже если позиция совпадает. – Julien

+0

в порядке, так как «по умолчанию» является именованным параметром, рекомендуется использовать аргумент ключевого слова 'default =' при вызове функции? Правильно ли я понял? – Sean

ответ

1

default является «ключевым аргументом» для функции get_slot(), а его значением по умолчанию является None. Когда вы вызываете get_slot() без указания «по умолчанию», оно принимает значение «Нет». В приведенном выше примере вы устанавливаете аргумент ключа по умолчанию «default», который является аргументом, переданным функции «get», поэтому он принимает значение None.

Таким образом, в данном случае это не меняет, называете ли вы:

get_slot(aMap, key)

или

get_slot(aMap, key, default = default)

но если значение отличается от None был передан функции get переменная default в вашей функции get_slot имеет значение, отличное от None.

Надеюсь, это немного облегчит его.

+0

спасибо за ваш ответ, почему-то человек, который редактировал мой вопрос, изменил код с «Нет» на «1» (я изменил его и добавил ссылку на пример «Learn Python the Hard Way», чтобы люди могли см. код in-situ). Изменит ли это ваш ответ? – Sean

+0

Спасибо за разъяснение. Это фактически изменяет ответ, так как в конце вашего значения 'default' будет принимать значение' None'. Способ передачи значений между функциями не изменяется, однако конечный результат будет. Я обновлю ответ! – toti08

+0

спасибо за это - это имеет большой смысл! – Sean

Смежные вопросы