Определение функции 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
Подробнее о стрелке здесь.