2016-04-16 4 views
1

私は数字のリストを持っています。私は、(例えば)第1項と第2項のために、私のインポートしたmathモジュールのすべての機能を実行したいと思います。モジュールのすべての機能を介在させる方法はありますか?

import math 
list = [1, 2, 3] 
#do stuff that will print (for example) 2+1, 2-1, 2/1, etc. 
+0

[モジュールの機能を反復処理する方法]の可能な重複(http://stackoverflow.com/questions/21885814/how-to-iterate-through-a-modules-functions:ここで変更されたコードです) – James

答えて

0

@Alex Hallの答えに基づいて、1つの引数を取る関数に2つのパラメータを渡すことを避けるために、例外処理を追加したいと思います。

for name in dir(math): 
    item = getattr(math, name) 
    if callable(item): 
     try: 
      item(list[0], list[1]) 
     # The function does not take two arguments or there is any other problem. 
     except TypeError: 
      print(item, "does not take two arguments.") 
1

ここには簡単な方法があります。関数が2つの引数を必要としない場合の動作を指定する必要があります。

for name in dir(math): 
    item = getattr(math, name) 
    if callable(item): 
     item(list[0], list[1]) 
0

あなた自身の数学モジュールをお持ちの場合、Pythonには既に標準的な数学モジュールがあるため、「数学」という名前を付けないでください。混乱やPython数学モジュールとの競合を避けるため、もっとユニークな名前を付けてください。

第二に、Pythonのを見て、モジュール内から関数のリストを取得するには、モジュールを「検査」 - >https://docs.python.org/2/library/inspect.html#inspect.getmembers

import inspect 
import myMathModule 

for name, member in inspect.getmembers(myMathModule): 
    print name, 'is function', inspect.isfunction(member) 

また2、彼らが言う受け入れることを確認するために、関数の引数を検査することができますあなたのリストから引数を取り除くか、フィルタリングします。しかし、これはプロダクションコードで使うのは良い考えではないと思います。多分あなたがそれがうまくいくかどうかをテストするかもしれません。さもなければ、モジュール内の関数ではなく引き出す関数名のリストを使用します。

+0

私はPythonの数学モジュールをインポートしています。私はinspectモジュールを使ってすべての関数をリストすることができますが、それらの関数を実行したかったので、そうすることができる特定のコードがあるかどうか疑問に思っていました。 – mkpappu

+0

私の例のように呼び出すことができますが、tryを使って呼び出す前に関数が必要とする引数をテストしたい場合があります。 メンバー(1,2) – scottiedoo

+0

「私のインポートされた数学モジュール」ではなく、 – scottiedoo

関連する問題