Определение функции Python3, стрелка и двоеточие

Я нашел следующее определение функции Python:

def reverseString(self, s: 'List[str]') -> 'None':

Я не совсем понимаю "List[str]" и -> "None".

Я обнаружил, что стрелка является аннотацией функции, но я не смог найти ничего полезного и понятного для List[str].

Это просто аннотация? или это обязывает, что тип параметра s должен быть строковым массивом?

3 ответа

Решение

Это просто подсказка типа Python, вы можете узнать больше в PEP 484

Это пример подсказки типа python3. Использование -> 'None' указывает на то, что функция не имеет оператора возврата.

List[str] интереснее: List part указывает, что он вернет тип списка и его аргумент [str] указывает, что это параметризованный тип. На практике списки Python могут содержать объекты любого типа, но в строго типизированном языке список представляет собой однородную коллекцию.

Использование этой подсказки как указывает вызывающей функции, что s должен содержать только строки, таким образом избегая любых исключений для любой операции, которая будет выполняться, и это также указывает интеллектуальной IDE (например, PyCharm, VSCode), что объекты, содержащиеся в списке, имеют методы экземпляра строки для индикаторов автозаполнения.

Интерпретатор python ничего не делает с этой информацией при проверке типов, однако интерпретатор mypy проверит ваш код.

Для получения дополнительной информации см. PEP 484 и модуль ввода, который также был перенесен на pre-3.5 python3 и 2.7.

Список [str] на самом деле не играет роли, если функция всегда снабжена s значение, когда оно называется. Я попробовал функцию с s: 'something different than list[str]' и это работало так же.


О проблеме со стрелкой, просто попробуйте:

def reverseString(self, s: 'List[str]') -> 'None':
    pass

Вызов:

output=reverseString('exampleinput1','exampleinput2')

Затем проверьте вывод:

print(c)

Никто

type(output)

NoneType

Подробнее о стрелке здесь.

Другие вопросы по тегам