我正在尝试编写一个将整数转换为浮点数的函数,并保持布尔值和字符串不变。
我定义了以下功能:
def if_int_to_float(value):
if isinstance(value, bool):
return value
elif isinstance(value, int):
return float(value)
else:
return value
广泛使用时,我发现此功能有点慢。有什么想法可以提高它的性能/使其更具Python风格吗?
答案 0 :(得分:3)
您可以删除一条支票并写在一行上,以在传递浮点数或字符串时略微提高速度。 bool案件已经非常快了。
Isinstance()在这里给您带来麻烦,因为布尔值也与int匹配,因此是您的第一个if语句,因此您可以改用type()
def if_int_to_float(value):
return value * 1.0 if type(value) == int else value
答案 1 :(得分:2)
尝试一下:
def if_int_to_float(value):
if type(value) == int:
return float(value)
else:
return value
答案 2 :(得分:1)
您也许可以组合您的if条件。这将有所帮助,因为我们会根据输入短路if条件,从而使您的代码更快!
def if_int_to_float(value):
#If not boolean and int or float, convert to float
if not isinstance(value, bool) and isinstance(value, int) or isinstance(value,float):
return float(value)
#Else return value
else:
return value
print(if_int_to_float('a'))
print(if_int_to_float(1))
print(if_int_to_float(1.0))
print(if_int_to_float(True))
输出将为
a
1.0
1.0
True
答案 3 :(得分:1)
当数据在列表中时,使用lambda
data=[1,3,'j','oo']
sol = list(map(lambda x: float(x) if type(x)=='int' else x, data))
print(sol)
输出
[1.0, 3.0, 'j', 'oo']
或使用功能测试单个值
def fun_int_to_float(value):
if type(value)=='int':
return float(value)
return value
答案 4 :(得分:1)
也许您可以尝试使用type()
函数并获得结果。或者,您可以使用异常处理来处理此类问题。但是在这种情况下,如注释中所指出的那样,在bool
值的情况下,它是从True
到1.0
和False
到0.0
。 / p>
#using type() function
def if_int_to_float(value):
if type(value) == int:
return float(value)
else:
return value