2016-12-14 3 views
0

Почему питон принимает этот код:Почему python требует, чтобы docstrings были отступом?

def is_right_triangle(leg1,leg2,hypotenuse): 
    """function for checking whether or not set of points makes a right triangle""" 
    return leg1 ** 2 + leg2 ** 2 == hypotenuse ** 2 

, но в этом коде, где строка документация не отступ

def is_right_triangle(leg1,leg2,hypotenuse): 
"""function for checking whether or not set of points makes a right triangle""" 
    return leg1 ** 2 + leg2 ** 2 == hypotenuse ** 2 

он бросает «ожидаемый отступ блок» ошибку.

Почему python заботится, если docstring с отступом или нет?

+0

Поскольку docstring является фактической строкой и отступом в Python. –

+0

Иными словами, python считает, что docstring является частью функции. – Tookie345

+0

Это просто строка. Конечно, это связано с функцией, но дело в том, что ее нужно анализировать в соответствии с правилами синтаксиса Python. –

ответ

4

Потому что docstring - это еще одно выражение в функции. Его обрабатывают только особым образом, потому что это строка и первое выражение.

Вы также можете видеть, что, получая функцию AST:

> a=ast.parse('def f(x):\n "docstring"\n return 0') 
> a.body[0].body 
[<_ast.Expr at 0x7f18bb3e6a20>, <_ast.Return at 0x7f18bb3e6550>] 
> a.body[0].body[0].value.s 
'docstring' 
1

Потому что в самом начале питона в 1990-е годы, Гвидо Ван Россум постановил, что все утверждения в определении функции должны быть отступы и что string - выражение.

Только GvR может действительно ответить на этот вопрос. Python происходит от игрушечного языка с именем ABC. Докшлинк уже может быть отступом в ABC ...

+0

Строка * это * выражение выражение. Если вам это не нравится, вы можете вставлять # перед ним и превращать его в комментарий. Конечно, это не формальная докшлина. Существуют другие языки и/или системы документации, которые рассматривают определенные комментарии как специальные, например #pragma. Я предпочитаю путь Питона. – nigel222

+0

@ nigel222 Я не говорю, что мне это не нравится, я только говорю, что не знаю всех аргументов в голове GvR, когда он решил, что docstrings должны иметь этот синтаксис. Возможно, у ABC была некоторая привычка к комментариям. – Gribouillis

+0

@Griboulis Извините, что пришло слишком личное. Я хочу сказать, что синтаксис на языке означает, что docstring является выражением выражения по определению, точно так же, как строка в строке сама по себе является выражением в любом месте кода. И как утверждение, а не комментарий, оно должно быть соответствующим образом отступом. – nigel222

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