Новичок Python: Что делает этот код?

1

Это фрагмент из учебника Google AppEngine.

application = webapp.WSGIApplication([('/', MainPage)], debug=True)

Я не совсем уверен, что debug=True внутри вызова конструктора. Создает ли она локальную переменную с именем debug, присваивает ей True и передает ее конструктору или это способ установить значение переменной члена экземпляра класса в конструкторе?

Теги:

3 ответа

11
Лучший ответ

Функции Python принимают аргументы ключевых слов. Если вы определите такую ​​функцию:

def my_func(a, b='abc', c='def'):
    print a, b, c

Вы можете называть это следующим образом:

my_func('hello', c='world')

И результат будет:

hello abc world

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

def my_other_func(a, *b, **c):
    print a, b, c
  • *b означает, что переменная b будет принимать все неименованные аргументы после a, как объект tuple.
  • **c означает, что переменная c примет все именованные аргументы как объект dict.

Если вы вызываете функцию следующим образом:

my_other_func('hello', 'world', 'what a', state='fine', what='day')

Вы получите:

hello ('world', 'what a') {'state': 'fine', 'what': 'day'}
  • 0
    Спасибо за быстрый ответ!!! По-видимому, это лучший способ переопределить значение аргумента по умолчанию, чем это делает c / c ++, где в вашем примере мне также придется передать b = 'abc'.
  • 0
    Действительно, это одно из применений именованных аргументов =)
Показать ещё 1 комментарий
4

Ничего - скорее, webapp.WSGIApplication принимает необязательный аргумент с именем debug, и этот код передает значение True для этого параметра.

Ссылка на WSGIApplication здесь, и на нем явно показан необязательный аргумент debug и тот факт, что по умолчанию он равен False если явно не передано.

Как ясно из страницы, передача debug как True означает, что полезная информация отладки отображается браузеру, если и когда возникает исключение при обработке запроса.

Как именно получается этот эффект (в частности, подразумевает ли он наличие атрибута на экземпляре WSGIApplication или как может быть назван этот гипотетический атрибут) является внутренней, недокументированной деталью реализации, которую мы не обязательно беспокоиться (конечно, вы можете изучить источники WSGIApplication в SDK, если вы беспокоитесь, или просто хотите узнать больше о одной возможной реализации этих спецификаций!).

3

Он использует именованные аргументы. См. Использование необязательных и именованных аргументов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню