2016-11-17 16 views
2

В Python 3 вы можете добавить описание параметров функции:Объединяет описания аргументов и тип намека на Python 3?

def foo(host: 'ip address for connection') 
    cool_stuff() 

и вы можете также обеспечить ожидаемый тип, который впоследствии может быть проверено с mypy:

def foo(host: str) 
    cool_stuff() 

Оба являются очень полезными в моей глаза - есть ли способ объединить оба и все еще быть в состоянии позволить mypy проверить согласованность?

ответ

4

Нет, отчасти поэтому PEP 484 был написан, чтобы предлагать четкое и единственное использование аннотаций функций, типов-подсказок.

В частности, в , говорится:

Одна линия аргументации указывает на то, что PEP 3107 явно поддерживает использование произвольных выражений в функции аннотаций. Новое предложение считается несовместимым со спецификацией PEP 3107.

и переходит в состояние:

Мы надеемся, что советы типа в конечном итоге станет единственным использованием аннотаций, но это потребует дополнительного обсуждения и периода устаревания после первоначальной выкатной из модуль ввода с Python.

Альтернатива, где Определяя оба были признаны, но, очевидно, отвергнутая из-за снижение читаемости коды:

Несмотря на все эти варианты, предложения было распространены, чтобы намеки типа и другие формы аннотаций к сосуществующим для индивидуальные аргументы. Одно из предложений предполагает, что если аннотация для данного аргумента является литералом словаря, каждый ключ представляет собой другую форму аннотации, а ключ 'type' будет использоваться для типов подсказок. Проблема с этой идеей и ее вариантами заключается в том, что обозначение становится очень «шумным» и трудночитаемым.

Разрешение обоих будет также бить точку этого PEP и фрагментировать использование аннотаций. В конце концов, ваш лучший вариант - использовать хорошие оловянные слова для документирования параметров и придерживаться аннотаций функций исключительно для подсказок типов.