在Python函数中显式定义数据类型

inb24sb2  于 2023-06-07  发布在  Python
关注(0)|答案(5)|浏览(159)

我想在python函数中定义两个变量,并显式地将它们定义为float。然而,当我试图在函数参数中定义它们时,它显示语法错误。
请帮助我获得所需的输出。
下面是代码:

def add(float (x) , float (y)) :
    z = (x+y)
    return (print ("The required Sum is: ", z))

add (5, 8)
zyfwsgd6

zyfwsgd61#

Python是一种强类型的动态语言,它将类型与 * 值 * 相关联,而不是名称。如果要强制调用方提供特定类型的数据,唯一的方法是在函数中添加显式检查。
最近,type annotations被添加到了该语言中。现在,您可以编写语法正确的函数规范,包括参数和返回值的类型。示例的注解版本为

def add(x: float, y: float) -> float:
    return x+y

但是请注意,this is syntax only。Python解释器中没有任何操作。有像mypy这样的外部工具可以帮助你实现你的目标,它们现在正在快速成熟,成为语言的一个既定部分(尽管人们希望它们仍然是严格可选的,记住存在大量的无类型代码)。
注解的用途比最初在pydantic等工具中的用途更广泛,pydantic使用注解执行数据验证。这支持了有趣的新范例,被(例如)FastAPI服务器所利用,展示了提高Web编码生产力的巨大潜力。

5n0oy7gb

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也是如此!

dgjrabp2

dgjrabp23#

在Python中不可能将Data-Type定义为strongly typed dynamic language但可以添加***Type-Hint。***

link: str

这是python中的type-hint示例。您也可以check-out.
再看看mypy:

h79rfbju

h79rfbju4#

将函数z = float(x+y)更改为z = float(x)+ float(y)
在这一点上,我们假设我们只是把数字加在一起。
让我们确保我们总是使用浮动。在将参数加在一起之前将它们转换为浮点数。你可以使用float()函数来实现。
好的,让我们确保不管进来什么,它都被转换成了一个浮点数

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'
r9f1avp5

r9f1avp55#

使用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()

相关问题