2016-08-31 18 views
3

私は2つの.pyスクリプトファイルを持っています。 "メイン"スクリプトは、その他の "ヘルパー"機能を含む2番目のスクリプトをインポートします。インポートされた関数内のPythonオブジェクトの参照

メインスクリプトでは、SPIインターフェイスのオブジェクトを設定しました。 SPIインターフェイスを直接使用するインポートされたファイルに関数を書きたいと思います。私はこれのノブであり、様々な方法で書いて渡すことを試みましたが、常にエラーが発生します。

mainscript.py

import helperfunctions.py as helper 

spi = spidev.SpiDev() 
spi.open(0, 0) 

response = spi.xfer([ ... some data ...]) #this works when 
              #called from mainscript.py 

helper.sendOtherStuff() #this doesn't work (see helper script below) 

helperfunctions.py

def sendOtherStuff(): 
    #need to somehow reference 'spi.' object from mainscript.py file 
    otherData = ([... some different data ...]) 
    resp = spi.xfer([otherData]) #this fails because helperfunctions 
           #apparently doesn't know spi. object 
    return resp 

私は頻繁にもグローバル変数の値について同じ一般的な質問があります。私は確かにそれを行う "より良い"方法があると確信していますが、今のところは、mainscript.pyにいくつかのグローバル変数を定義し、それらのグローバルをhelperfunctions.pyの関数内で参照することがしばしばあります。私はこれを行う方法を考え出すことはできません。他の方法は簡単です - helperfunctions.py内のグローバル変数を宣言し、mainscript.pyからhelper.variableNameとして参照してください。しかし、他の方向へ行く方法はわかりません。

いずれの方向も高く評価されています。ありがとうございました。

+0

あなたには、インポートの問題があるようです。 Btwでは、ファイルやモジュールをインポートするときに '.py'接尾辞は必要ありません。ちょうど 'ヘルパーとしてインポートhelperfunctions'を行う。ヘルパー関数は本来、外部のオブジェクトやモジュールを必要としません。彼らはちょうどヘルパーですから。私はあなたのコードアーキテクチャを修正すべきだと思います。 *(たとえば、パラメータとして 'spi'を取るようにヘルパー関数を定義することができます)。* – ozgur

+0

ozgurありがとうございます。私はパラメータとして渡してみましたが、関数内で実際にオブジェクトを実行する方法がわかりませんでした。下のロバートの例はこれを解決したようだ。意味をなさない私は朝にしようと楽しみにしています。ありがとう! – kjav

答えて

3

私の光によって最も簡単な方法は、パラメータとしてヘルパー関数にSPIオブジェクトを渡すために、次のようになります。それが渡されています

def sendOtherStuff(spi): 
    otherData = ([... some different data ...]) 
    return spi.xfer([otherData]) 

たら、のボディに、それにメソッドを呼び出すことができます関数。私はあなたの変数の割り当てを削除しました。

+0

コード例ありがとうございます。それは理にかなっている。明確にするために、私は理解しています...関数にオブジェクトを渡すときに、単に戻り値で呼び出すと、これは実行されますか?それはあなたの例からそのように見えます。私はこれを知らなかった - まさに私が逃したもののように見える。ありがとう! – kjav

+0

もう一度ありがとう。これはそれだった。期待どおりに動作します。 – kjav

関連する問題