Python - Укажите тип данных аргументов - PullRequest
0 голосов
/ 30 марта 2020

Для простоты c рассмотрим функцию Python:

def to_string(value):
    return str(value)

Поскольку мы не можем определить типы данных параметров в Python (насколько я знаю), когда я передаю 1/2 в вышеуказанную функцию, она автоматически преобразует 1/2 в 0.5 и затем возвращает строку '0.5'. Как мне заставить его вернуть '1/2'? Как заставить Python обрабатывать аргументы определенного типа данных, независимо от того, как они «выглядят»?

1 Ответ

1 голос
/ 30 марта 2020

Здесь (в python 3) 1/2 оценивается до 0,5, прежде чем даже будет передано в функцию. В этом конкретном примере c вы потеряли информацию из-за возможных ошибок точности с плавающей запятой до того, как функция была вызвана; Теоретически вы можете вернуться к 1/2 от 0,5, но вы не должны полагаться на эту манипуляцию с плавающей точкой. Чтобы не потерять эту точность, вам, вероятно, следует рассматривать дробь как две части целочисленной информации, как она есть на самом деле, вместо одного с плавающей точкой.

from fractions import gcd

def to_string(n, d):
    g = gcd(n, d)
    return str(n//g) + "/" + str(d//g)

Если то, что вы спрашиваете, относится именно к дробям, то класс, построенный вокруг этой идеи, вероятно, ваш лучший выбор. Если ваш пример не является пояснительным, то (как известно) python не имеет принудительного ввода типов. Однако вы можете прочитать здесь https://docs.python.org/3/library/typing.html о модернизации этой идеи и декораторов.

...