[英]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.