我想在python函数中定义两个变量,并显式地将它们定义为float。然而,当我试图在函数参数中定义它们时,它显示语法错误。请帮助我获得所需的输出。下面是代码:
def add(float (x) , float (y)) : z = (x+y) return (print ("The required Sum is: ", z)) add (5, 8)
zyfwsgd61#
Python是一种强类型的动态语言,它将类型与 * 值 * 相关联,而不是名称。如果要强制调用方提供特定类型的数据,唯一的方法是在函数中添加显式检查。最近,type annotations被添加到了该语言中。现在,您可以编写语法正确的函数规范,包括参数和返回值的类型。示例的注解版本为
def add(x: float, y: float) -> float: return x+y
但是请注意,this is syntax only。Python解释器中没有任何操作。有像mypy这样的外部工具可以帮助你实现你的目标,它们现在正在快速成熟,成为语言的一个既定部分(尽管人们希望它们仍然是严格可选的,记住存在大量的无类型代码)。注解的用途比最初在pydantic等工具中的用途更广泛,pydantic使用注解执行数据验证。这支持了有趣的新范例,被(例如)FastAPI服务器所利用,展示了提高Web编码生产力的巨大潜力。
mypy
pydantic
5n0oy7gb2#
但是你可以检查函数中提供的示例是否是你想要的类型!
def add(x: float, y: float) -> float: if not isinstance(x, float): raise TypeError("x and y variables not of type float")
对于y var也是如此!
dgjrabp23#
在Python中不可能将Data-Type定义为strongly typed dynamic language,但可以添加***Type-Hint。***
link: str
这是python中的type-hint示例。您也可以check-out.再看看mypy:
h79rfbju4#
将函数z = float(x+y)更改为z = float(x)+ float(y)在这一点上,我们假设我们只是把数字加在一起。让我们确保我们总是使用浮动。在将参数加在一起之前将它们转换为浮点数。你可以使用float()函数来实现。好的,让我们确保不管进来什么,它都被转换成了一个浮点数
z = float(x+y)
z = float(x)+ float(y)
def add(x, y): z = float(x)+ float(y) print "The required Sum is: {}".format(z) return z add (5, 8)
但是如果a和b是字符串呢??我得处理一下。
def add(x, y) try: a = float(x) b = float(y) except ValueError: return None else: return True
顺便说一句,在python中不需要检查数据类型,使其更简单
def addSum(x,y): return x+y addSum(2.2, 5.6) 7.8 addSum(float(2), float(5)) 7.0 addSum(2, 5) 7 addSum("Hello ", "World!!") 'Hello World'
r9f1avp55#
使用assert isinstance
assert isinstance
#!/usr/bin/env python3 import sys def this_add(x: float, y: float): assert isinstance(x, float), f"[e] {x} should be a float and it is {type(x)}" assert isinstance(y, float), f"[e] {y} should be a float and it is {type(y)}" z = (x+y) return z print(f"The required Sum is: {this_add(5.2, 8.9)}") import unittest class TestStringMethods(unittest.TestCase): def test_int(self): self.assertRaises(AssertionError, this_add, 5, 8) def test_float(self): self.assertEqual(14.0, this_add(5.1, 8.9) ) def test_float_and_int(self): self.assertRaises(AssertionError, this_add, 5.1, 8) def test_int_and_float(self): self.assertRaises(AssertionError, this_add, 5, 8.9) def test_tuple(self): self.assertRaises(AssertionError, this_add, (5.1, 8.9), 0) def test_string(self): self.assertRaises(AssertionError, this_add, "5.1", "8.9") unittest.main()
5条答案
按热度按时间zyfwsgd61#
Python是一种强类型的动态语言,它将类型与 * 值 * 相关联,而不是名称。如果要强制调用方提供特定类型的数据,唯一的方法是在函数中添加显式检查。
最近,type annotations被添加到了该语言中。现在,您可以编写语法正确的函数规范,包括参数和返回值的类型。示例的注解版本为
但是请注意,this is syntax only。Python解释器中没有任何操作。有像
mypy
这样的外部工具可以帮助你实现你的目标,它们现在正在快速成熟,成为语言的一个既定部分(尽管人们希望它们仍然是严格可选的,记住存在大量的无类型代码)。注解的用途比最初在
pydantic
等工具中的用途更广泛,pydantic
使用注解执行数据验证。这支持了有趣的新范例,被(例如)FastAPI服务器所利用,展示了提高Web编码生产力的巨大潜力。5n0oy7gb2#
但是你可以检查函数中提供的示例是否是你想要的类型!
对于y var也是如此!
dgjrabp23#
在Python中不可能将Data-Type定义为strongly typed dynamic language,但可以添加***Type-Hint。***
这是python中的type-hint示例。您也可以check-out.
再看看mypy:
h79rfbju4#
将函数
z = float(x+y)
更改为z = float(x)+ float(y)
在这一点上,我们假设我们只是把数字加在一起。
让我们确保我们总是使用浮动。在将参数加在一起之前将它们转换为浮点数。你可以使用float()函数来实现。
好的,让我们确保不管进来什么,它都被转换成了一个浮点数
但是如果a和b是字符串呢??我得处理一下。
顺便说一句,在python中不需要检查数据类型,使其更简单
r9f1avp55#
使用
assert isinstance