【问题标题】:Explicitly Define Datatype in Python Function在 Python 函数中显式定义数据类型
【发布时间】:2017-04-05 14:05:10
【问题描述】:

我想在 python 函数中定义 2 个变量并将它们明确定义为 float。但是,当我尝试在函数参数中定义它们时,它显示语法错误。

请帮我获得所需的输出。

代码如下:

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

add (5, 8)

【问题讨论】:

标签: python python-3.x function floating-point explicit


【解决方案1】:

Python 是一种强类型的动态语言,它将类型与 相关联,而不是名称。如果你想强制调用者提供特定类型的数据,你可以这样做的唯一方法是在你的函数中添加显式检查。

最近type annotations 被添加到语言中。现在您可以编写语法正确的函数规范,包括参数类型和返回值。您的示例的注释版本将是

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

但请注意,这只是语法。 Python 解释器中的任何内容都没有执行任何操作。有像 mypy 这样的外部工具可以帮助您实现目标,这些工具现在正在迅速成熟,成为该语言的既定部分(尽管人们希望它们仍然是严格可选的,请记住庞大的无类型语料库存在的代码)。

pydantic 等工具中,注解的用途比最初预期的更广泛,这些工具使用它们来执行数据验证。这支持有趣的新范例,被(例如)FastAPI 服务器利用,展示了提高 Web 编码效率的巨大潜力。

【讨论】:

    【解决方案2】:

    你可以检查函数中提供的实例是否是你想要的类型!

    def add(x: float, y: float) -> float:
          if not isinstance(x, float):
               raise TypeError("x and y variables not of type float")
    

    对于 y 变量也是如此!

    【讨论】:

    • 格式化代码并添加信息以便更好地理解。
    【解决方案3】:

    不可能在 Python 中定义 Data-Type,因为它是 strongly typed dynamic language但可以添加 Type-Hint .

    link: str
    

    这是 python 中的类型提示示例。 你也可以check-out.

    也看看mypy:

    【讨论】:

      【解决方案4】:

      将函数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'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-27
        • 2015-12-09
        • 2013-04-21
        • 2021-05-16
        • 2014-08-26
        • 2011-07-02
        • 2021-02-15
        • 1970-01-01
        相关资源
        最近更新 更多