繁体   English   中英

对不同类型使用相同的 function

[英]use same function for different types

我有以下 function:

def calculate_digits(number: Union[int, float, str]) -> int:
    absolute_value: float = abs(number)
    rounded_value: int = math.floor(absolute_value)
    total_digits_needed: int = calculate_length_integer(rounded_value)
    return total_digits_needed

如您所见,我想将其用于不同的 python 类型:int、float、str ... 由于 abs() 仅适用于浮点数,我想知道,我该如何最好地处理这个问题? 我是否需要使用 if、elsif 语句编写 function 来执行此操作,还是有更好的方法来执行此操作?

对我来说 abs() 也适用于 int ......我正在使用 python 3.9。

例如,下面的代码至少对我有用:

number = abs(3)

检查是否需要更新

首先, abs不仅适用于float 它适用于数字 至少:

  • int
  • float
  • complex
  • decimal.Decimal

可能还有其他人。 您甚至可以使用numbers.Number作为类型提示,但我不确定这是否过于宽泛。

其次,这个 function 真的应该是两个函数,因为字符串与数字类型完全不同。

def calculate_digits(number: Union[int, float]) -> int:
    absolute_value = abs(number)
    rounded_value = math.floor(absolute_value)
    return cacalculate_length_integer(rounded_value)

def calculate_digits_from_string(n: str) -> int:
    x = ... # Convert the string to an appropriate number.
    # There isn't enough detail in the question to know
    # which strings can be appropriate converted; float(n)
    # might be sufficient, though it could fail for an arbitrary
    # string.
    return calculate_digts(x)

您可以再次组合它们,但我不建议这样做,因为将字符串转换为数字的工作应该分开进行。

def calculate_digits(number: Union[int, float, str]) -> int:
    if isinstance(number, str):
        number = ...  # Convert as above
    absolute_value = abs(number)
    rounded_value = math.floor(absolute_value)
    return cacalculate_length_integer(rounded_value)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM