文字列名でプログラムで演算子を検索する

ブラックサイト

次のコードがあるとします。

def process(x, y, op):
    if op == 'eq':
        return x == y
    elif op == 'gt':
        return x > y
    elif op == 'lt':
        return x < y
    ... for many more operators, e.g. >=, <=, !=

これをよりプログラム的に抽出するにはどうすればよいですか?私は次のようなルックアップを作成することを考えています:

op_lookup = {'eq': '==', 'gt': '>', 'lt': '<', ...}

次に、次のようなことを行います。

def process(x, y, op):
    return x op_lookup[op] y

これは明らかに有効なPythonではありません...

のようなものevalが機能する可能性があります:

def process(x, y, op):
    return eval('{} {} {}'.format(x, op_lookup[op], y))

例では、これが生成されます。

>>> process(1, 1, 'eq')
True
>>> process(1, 1, 'lt')
False

これを達成するためのより良い(より安全な?)方法はありますか?

timgeb

呼び出し可能オブジェクトとしての演算子は、operatorモジュール内に隠されています。getattr組み込みの名前で特定の演算子に動的にアクセスできます

デモ:

>>> import operator         
>>> getattr(operator, 'eq')(1, 1)
True
>>> getattr(operator, 'eq')(1, 2)
False
>>> getattr(operator, 'lt')(1, 2)
True
>>> getattr(operator, 'lt')(2, 1)
False

これを使用して、関数を次のように書き直すことができます。

import operator

def process(x, y, op):
    return getattr(operator, op)(x, y)

(必要に応じてサニティチェックを追加します。)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

プログラムで不等式演算子を選択する

分類Dev

Pythonでコンマ演算子で区切られた行のアナグラム単語を検索する

分類Dev

UISearchControllerの検索バーをプログラムで表示する

分類Dev

プログラムでXAMLを検索して置換する

分類Dev

ajaxなしでプログラムでグーグルを検索する

分類Dev

アナグラムである文字列のグループを検索する

分類Dev

プログラムでカスタム検索を使用してPythonでGoogleを検索する

分類Dev

プログラムでUISearchControllerの検索クエリ文字列をリセットする

分類Dev

jsの条件文の論理演算子をプログラムで変更することは可能ですか?

分類Dev

Drools6カスタム演算子をJavaを使用してKieServicesにプログラムで登録する方法

分類Dev

postgres検索文字列で演算子「*」を使用できますか

分類Dev

IN演算子を使用してpandas.Seriesで文字列を検索する

分類Dev

<演算子C#でプログラムの開始時に.datファイルをロードする方法

分類Dev

プログラムで検索バーをすばやく修正する方法

分類Dev

jQueryDataTablesを使用してプログラムでテーブルを検索する

分類Dev

Eclipseプラグイン:三項演算子を検索/解析する方法は?

分類Dev

R ShinyDT-プログラムで検索テキストを入力する

分類Dev

プログラムで検索された列を変更するAg-GridQuickFilter

分類Dev

文字列内の部分文字列を検索するCプログラム

分類Dev

文字列内の部分文字列を検索するCプログラム

分類Dev

プログラムでキャストと出力を取得する演算子の種類

分類Dev

プロローグで演算子を定義する

分類Dev

キーワードを使用してプログラムでグーグル検索を実行する

分類Dev

どのようにしてC ++プログラムで文字列を検索しますか?

分類Dev

OR / AND演算子を使用してGitHubで検索する方法

分類Dev

==演算子でベクトルを検索する

分類Dev

jqGridの検索演算子をその場で翻訳する

分類Dev

プログラムで複数の文字をBing検索エンジンに挿入し、それぞれの文字を検索します

分類Dev

プログラムで演算子()が2回呼び出されるのはなぜですか?

Related 関連記事

  1. 1

    プログラムで不等式演算子を選択する

  2. 2

    Pythonでコンマ演算子で区切られた行のアナグラム単語を検索する

  3. 3

    UISearchControllerの検索バーをプログラムで表示する

  4. 4

    プログラムでXAMLを検索して置換する

  5. 5

    ajaxなしでプログラムでグーグルを検索する

  6. 6

    アナグラムである文字列のグループを検索する

  7. 7

    プログラムでカスタム検索を使用してPythonでGoogleを検索する

  8. 8

    プログラムでUISearchControllerの検索クエリ文字列をリセットする

  9. 9

    jsの条件文の論理演算子をプログラムで変更することは可能ですか?

  10. 10

    Drools6カスタム演算子をJavaを使用してKieServicesにプログラムで登録する方法

  11. 11

    postgres検索文字列で演算子「*」を使用できますか

  12. 12

    IN演算子を使用してpandas.Seriesで文字列を検索する

  13. 13

    <演算子C#でプログラムの開始時に.datファイルをロードする方法

  14. 14

    プログラムで検索バーをすばやく修正する方法

  15. 15

    jQueryDataTablesを使用してプログラムでテーブルを検索する

  16. 16

    Eclipseプラグイン:三項演算子を検索/解析する方法は?

  17. 17

    R ShinyDT-プログラムで検索テキストを入力する

  18. 18

    プログラムで検索された列を変更するAg-GridQuickFilter

  19. 19

    文字列内の部分文字列を検索するCプログラム

  20. 20

    文字列内の部分文字列を検索するCプログラム

  21. 21

    プログラムでキャストと出力を取得する演算子の種類

  22. 22

    プロローグで演算子を定義する

  23. 23

    キーワードを使用してプログラムでグーグル検索を実行する

  24. 24

    どのようにしてC ++プログラムで文字列を検索しますか?

  25. 25

    OR / AND演算子を使用してGitHubで検索する方法

  26. 26

    ==演算子でベクトルを検索する

  27. 27

    jqGridの検索演算子をその場で翻訳する

  28. 28

    プログラムで複数の文字をBing検索エンジンに挿入し、それぞれの文字を検索します

  29. 29

    プログラムで演算子()が2回呼び出されるのはなぜですか?

ホットタグ

アーカイブ