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

音楽の先生に、ルールを正しく破る方法を知っている限り、ルールを破っても大丈夫だと言われたことがあります。これは、私にはそれらのケースの 1 つに思えます。このビットのコードを実装するためのより 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 に答える