2017-12-13 12 views
0

私はPython 2を使用しています。私はpyspecライブラリをインポートしました。 「スキャン」はインスタンスタイプのデータです。Pythonのメソッド引数を使用して関数を定義する方法

figure() 
plot(scan.A,scan.B) 
show() 

x変数として 'xvar'、y変数に 'yvar'を持つこのコードプロットです。 「スキャン」には、多くの変数(A、B、Cなど)があります。

が、私は関数を定義しようとした:名前「」

私はこの機能をどのように修正することができますが定義されていません。

def plotscan(x,y): 
    figure() 
    plot(scan.x,scan.y) 
    show() 

plotscan(A,B) 

しかし、このコードは、エラーメッセージになりますか?

+0

'spec.A'のように? – Carcigenicate

+0

カルシゲネイト/それは私の間違いです。私は訂正しました:sp​​ec-> scan – comphys

+0

'scan'のタイプはインスタンスです。 – comphys

答えて

0

plotscan(A, B)を呼び出すと、xがAの場合、scan.xscan.Aになります。

通訳者はAとBが何であるかを知りませんし、またscan.xはちょうどscan.< value of x >と評価されるので意味がありません。

ソリューションはgetattr()を使用することです(https://docs.python.org/2/library/functions.htmlを参照)

class Scan(object): 
    A = 1 
    B = 12 
    C = 20 

scan = Scan 

def plotscan(x,y): 
    _x = getattr(scan, x) 
    _y = getattr(scan, y) 
    print _x, _y 


plotscan("A", "B") 

(私は、例示の目的のためにprintplotへの呼び出しを交換しましたので、あなたの特定のlibsがインストールされていない誰もが試すことができます例)

ここではAとBを文字列として渡します。plotscan(x, y)の関数getattr()は、第2パラメータで定義された名前を持つオブジェクトscanの属性の値を返します。

+1

それは動作します!ご返信ありがとうございます。 – comphys

+0

あなたのフィードバックに感謝します – jps

+1

私は 'plot(eval(' scan。%s '%xvar)、eval('。%s '%yvar)をスキャンします)'を使用して成功することもできます。 'getattr'がより簡単です。 – comphys

関連する問題