Новичок Python: Что делает этот код? - PullRequest
1 голос
/ 21 июня 2009

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

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

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

Ответы [ 3 ]

11 голосов
/ 21 июня 2009

Функции 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'}
4 голосов
/ 21 июня 2009

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

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

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

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

3 голосов
/ 21 июня 2009

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

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