如果我错了,请纠正我……是仅出于提示而提示类型……它不执行任何操作吗?

问题描述 投票:0回答:2
def adding(a, b) -> int:
    return a+b
print(adding(1,0.7))

类似于此代码...我得到的输出是1.7,而不是预期的1.。所以它基本上意味着没有“类型转换”?

python-3.x function casting type-conversion python-3.7
2个回答
0
投票

是的,更多的是文档资料。

Erlang(我比较熟悉)具有相同的概念,但他们将其称为type specification。动态语言有时可以建议参数可能的所有可能类型,这对将来的程序员有帮助。有时也有一个工具(Erlang称为Dialyzer),可以针对代码库运行该工具,以确保传递给函数的值是您“提示”的类型之一。

[似乎有一个类似的Python工具mypy,它将使用您的“类型提示”执行一些静态类型检查。

Mypy是Python的可选静态类型检查器,旨在结合动态(或“鸭子”)类型和静态类型的优点。 Mypy将Python的表达能力和便利性与功能强大的类型系统和编译时类型检查结合在一起。 Mypy类型检查标准的Python程序;使用任何Python VM运行它们,基本上没有运行时开销。


0
投票

是的,您是正确的。但是,如果您希望从float中获取整数,我想您需要使用函数int/1作为回报,例如:

>>> def adding(a, b):
...   return int(a+b)
... 
>>> print(adding(1,0.7))
1

对于检测类型,您可以使用功能type/1并将示例重写为:

>>> def adding(a, b):
...   if((type(a) is int or type(a) is float) and (type is int(b) or type(b) is float)):
...     x = a + b
...     if(type(x) is int):
...       return a + b
...     else:
...       return int(a + b)
...   else:
...     print("Bad Arguments")
... 
>>> adding({}, 0.1)
Bad Arguments
>>> adding(1, 0.7)
1

希望,这将有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.