0

关于使用“hasattr”或“isinstance”来确定对象类型的争论很多。但是,我有一种情况,我试图构建一个查询numexpr,我需要引用字符串,而不是其他值。我打算使用以下代码:

def get_query(key_map):
    """
    Generate an equality query, based on key/value
    pair in key_map
    """
    stmnt = ""
    for k,v in key_map.items():
        value = '"%s"' % v if isinstance(v, str) else v
        if not stmnt:
            # first equality in statement
            stmnt = "'(%s == %s)" % (k,value)
        else:
            stmnt += " & (%s == %s)" % (k,value)

    if stmnt:
        # close statement
        stmnt += "'"
    return stmnt

我也考虑hasattr过使用:

value = '"%v"' % v if hasattr(v,'lower') else v

我曾经有一位音乐老师告诉我,只要你知道如何正确地打破规则,就可以打破规则。对我来说,这似乎是其中之一。有没有人建议用一种更 Pythonic 的方式来实现这段代码?

样本输入:

key_map = {'symbol':'APPL', 'price':698.38'}

在上面的示例中,我想引用 APPL,因为它是一个字符串,而不是 698.38,因为它是一个浮点数。

问候

4

2 回答 2

3

我想你可能会追求的是:

value = repr(v)

此外,你的下半场无论如何都不会使用value

于 2012-11-11T16:36:57.063 回答
1

然而,让我印象深刻的一件事是你的引号。假设您用引号括起来的字符串已经包含引号。@Eric 提出的答案会为您解决这个问题,它会正确处理转义字符串中的引号(如果有的话)。

于 2012-11-11T16:39:03.110 回答