3

これまで、主にテキスト処理とデータ分析のために、1 スクリプトのPython プログラムを作成してきました。

今、古い Matlab シミュレーション プロジェクトの 1 つを Python/NumPy に持ち込みたいと考えています。そのプロジェクトでは.m、数十の関数 (それぞれ別の.mファイル) を持つ 1 つのメイン プログラム (ファイル) があります。関数ごとに引数として入力する必要がないように、すべての関数で使用されるグローバル変数がありました。しかし、グローバル変数が未定義になるか、別のファイルで別の関数を呼び出すため、メインプログラムを実行せずに個々の関数を実行/テストすることはできません。さらに、ファイルの整理がめちゃくちゃです。新しい機能を追加したり、既存の機能を変更したりするのは面倒です。特にメイン プログラムはそうです。

今度はちゃんとやりたい。それが正しい言葉であれば、プログラムに適切なアーキテクチャーが必要です。まず、これらすべての機能を整理する方法を知る必要があります。それぞれの小さな関数が独自のファイルを持つことは良い考えではないと思います。これらの関数をいくつかのグループに分割し、各グループを 1 つのファイルにすることができると思いますか? それ.pyはファイルですか、それとも他の種類のファイルですか? 次に、新しい機能を簡単に追加できるように、簡単に拡張できるようにしたいと考えています。

これを行う標準的な方法があるに違いないと思いますが、手がかりがありません。

もう 1 つの質問: Matlab プログラムを実行すると、終了後もワークスペースにすべての変数が残っているため、数値を確認したり、プロットを作成したりできます。しかし、IPython シェルを介して Python スクリプトを実行すると、後ですべてをクリアします。ワークスペースに似たものはありますか?

4

3 に答える 3

5

同じグローバル状態を共有する一連の関数がある場合はいつでも:

foo = 1
def do_something1():
    print foo

def do_something2():
    global foo
    foo += 1

クラスを定義する方が良いでしょう:

class NoGlobal(object):
     """docstring -- Pick a better name for your class please :)"""

     def __init__(self):
          self.foo = 1

     def do_something1(self):
          print self.foo

     def do_something2(self):
          self.foo += 1

これで、グローバル状態を共有しなくなり、グローバルをいじることなく、好きなだけ「シミュレーション」を実行できます。新しいクラス インスタンスをインスタンス化するだけで、新しいシミュレーションを開始する準備が整います。

スクリプトが終了した後に何かをいじることができるようにそのままにしておく限り、それが-iオプションの目的です。

python -i yourscript.py
于 2013-02-13T02:15:16.803 に答える
2

インタラクティブな Python シェルについて: Python でインタラクティブに作業したい場合、IPythonは非常に便利です。

pylab モードで開始: ipython --pylabMatlab のような機能を備えた対話型の python シェルを提供します (パッケージnumpyおよびmatplotlibの名前は既にスコープにインポートされています)。セッションを保存したり、保存されたセッションや任意の python プログラムをロードしたりすることもできます。

于 2013-02-13T06:51:47.077 に答える
1

私が探していたものの一部を見つけたと思います、それはこの質問で尋ねられます。物事はモジュール(.pyファイル)とパッケージ(ファイル付きのフォルダー)に整理でき__init__.pyます。このようにして、一連の関数を1つのモジュールにグループ化しプロジェクトのすべてのモジュールをパッケージに入れることができます。

私はまだclassグローバル変数のことを理解する必要があります。

于 2013-02-13T23:31:44.827 に答える