Python-指定参数';数据类型 为了简化事物,考虑Python函数: def to_string(value): return str(value)

Python-指定参数';数据类型 为了简化事物,考虑Python函数: def to_string(value): return str(value),python,casting,Python,Casting,由于我们无法在Python中定义参数的数据类型(据我所知),当我将1/2传递给上述函数时,它会自动将1/2转换为0.5,然后返回字符串'0.5'。如何使其返回'1/2'?如何强制Python将参数视为特定的数据类型,无论它们如何“显示”?这里(在Python 3中)1/2在被传递到函数之前被计算为0.5。对于这个特定的示例,由于可能的浮点精度错误,在调用函数之前,您已经丢失了信息;理论上,你可以从0.5回到1/2,但是你不应该依赖于这个浮动操作。为了不失去这种准确性,您可能应该将分数视为两个整数

由于我们无法在Python中定义参数的数据类型(据我所知),当我将
1/2
传递给上述函数时,它会自动将
1/2
转换为
0.5
,然后返回字符串
'0.5'
。如何使其返回
'1/2'
?如何强制Python将参数视为特定的数据类型,无论它们如何“显示”?

这里(在Python 3中)1/2在被传递到函数之前被计算为0.5。对于这个特定的示例,由于可能的浮点精度错误,在调用函数之前,您已经丢失了信息;理论上,你可以从0.5回到1/2,但是你不应该依赖于这个浮动操作。为了不失去这种准确性,您可能应该将分数视为两个整数信息,而不是一个浮点数

from fractions import gcd

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

如果你问的是关于分数的问题,那么围绕这个想法建立的课程可能是你最好的选择。如果您的示例不是解释性的,那么(著名的)python没有类型强制。但是,您可以在这里阅读有关此思想和装饰器现代化的内容。

Python的名称(变量、参数、函数名…)没有类型。值具有类型。执行计算
1/2
,结果为
0.5
,类型为
float
;所有这些都发生在函数被调用之前。有一些“注释”可以用来指示事物的预期类型,还有一些工具可以做一些静态分析来尝试实施这一点。但是您不能使
1/2
产生非
0.5
的结果,也不能使
0.5
产生非
float
的结果。这将有助于更好地理解您为什么要这样做。由于您的示例中的名称
分数
,您真正想要做的是能够在代码中表示有理数(分数),查看分子和分母,并将它们计算为浮点值。为此,.@KarlKnechtel我将
分数
重命名为
。我实际上创建了一个类,它的
\uuuu init\uuuu()
方法将分数作为分数读取,并以非十进制格式对其执行各种基于分数的算术。就像我们在小学时做的那样。你可以做
分数('11/10')
。这是个好把戏,我很欣赏。然而,我的要求一直是像分数一样阅读分数。如果我的需求允许读取两个参数,我可以同样轻松地从
fracts
库调用
fracts(n,d)
方法。1/2将在功能之前进行评估,如前所述