Как указать тип функции ввода и вывода без использования assert? - PullRequest
0 голосов
/ 09 июня 2018

Я использую Python 3.6 и хотел бы определить функцию, которая принимает два целых числа a и b и возвращает их деление c = a//b.Я хотел бы обеспечить ввод и вывод типов без использования assert.Из того, что я нашел в документации и на этом сайте, я понимаю, что эту функцию следует определять следующим образом:

def divide(a: int, b: int) -> int:
    c = a // b
    return c

divide(3, 2.) # Output: 1.0

Я ожидал ошибку (или предупреждение), начиная с b и * 1009.* не являются целыми числами.

  1. В чем проблема с моим конкретным кодом?
  2. Как правильно указать типы ввода и вывода без использования assert в целом?

1 Ответ

0 голосов
/ 09 июня 2018

Принудительная проверка во время выполнения выполняется в настоящее время только с помощью кода пользователя, например, с использованием сторонней библиотеки.

Один из таких вариантов: принудительное выполнение :

>>> import enforce  # pip install enforce
>>> @enforce.runtime_validation
... def divide(a: int, b: int) -> int:
...     c = a // b
...     return c
... 
... 
>>> divide(3, 2.0)
RuntimeTypeError: 
  The following runtime type errors were encountered:
       Argument 'b' was not of type <class 'int'>. Actual type was float.
...