将整数转换为浮点数

时间:2019-05-08 15:49:55

标签: python integer boolean

我正在尝试编写一个将整数转换为浮点数的函数,并保持布尔值和字符串不变。

我定义了以下功能:

def if_int_to_float(value):

    if isinstance(value, bool):

        return value

    elif isinstance(value, int):

        return float(value)

    else:

        return value

广泛使用时,我发现此功能有点慢。有什么想法可以提高它的性能/使其更具Python风格吗?

5 个答案:

答案 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值的情况下,它是从True1.0False0.0。 / p>

#using type() function
def if_int_to_float(value):
    if type(value) == int:
        return float(value)
    else:
        return value