1. ホーム
  2. python

pythonのソースコードを複数のファイルに分割する?

2023-09-18 02:24:13

質問

私は複数のファイルに分割したいコードを持っています。matlabでは単純に .m ファイルを呼び出すことができ、それが特に何かとして定義されていない限り、呼び出されたコードの一部であるかのように実行されます。例(編集済み)。

test.m (matlab)

function [] = test()
    ... some code using variables ...
    test2

test2.m (matlab)

... some more code using same variables ...

呼び出し test は test のコードと test2 のコードを実行します。

pythonで同じような方法はありますか? ... some more code ... を外部ファイルに入れて、それが呼び出されたファイルにあるかのように単純に読み込まれるような方法はありますか?

どのように解決するのですか?

私はちょうど今pythonのモジュール使用法を研究しており、上のコメントでMarkusが質問していること("変数がモジュールに組み込まれているときにどのようにインポートするか?")に2つの観点から答えようと思いました。

  1. 変数/関数、および
  2. クラスのプロパティ/メソッドです。

Markusのために変数の再利用を示すために、メインプログラムf1.pyをどのように書き換えるかです。

import f2
myStorage = f2.useMyVars(0) # initialze class and properties
for i in range(0,10):
    print "Hello, "
    f2.print_world()
    myStorage.setMyVar(i)
    f2.inc_gMyVar()
print "Display class property myVar:", myStorage.getMyVar()
print "Display global variable gMyVar:", f2.get_gMyVar()

再利用可能なモジュールf2.pyをどのように書き換えるかを説明します。

# Module: f2.py
# Example 1: functions to store and retrieve global variables
gMyVar = 0
def print_world():
    print "World!"
def get_gMyVar():
    return gMyVar # no need for global statement 
def inc_gMyVar():
    global gMyVar
    gMyVar += 1  

# Example 2: class methods to store and retrieve properties
class useMyVars(object):
    def __init__(self, myVar):
        self.myVar = myVar
    def getMyVar(self):
        return self.myVar
    def setMyVar(self, myVar):
        self.myVar = myVar
    def print_helloWorld(self):
        print "Hello, World!"

f1.pyを実行すると、次のような出力が得られます。

%run "f1.py"
Hello, 
World!
Hello, 
World!
Hello, 
World!
Hello, 
World!
Hello, 
World!
Hello, 
World!
Hello, 
World!
Hello, 
World!
Hello, 
World!
Hello, 
World!
Display class property myVar: 9
Display global variable gMyVar: 10

マーカスへの指摘は、こうだろう。

  • モジュールのコードを複数回再利用するには、モジュールのコードを 関数またはクラスに入れてください。
  • モジュールのプロパティとして保存された変数を再利用するには、クラス内でプロパティを初期化します。 クラス内でプロパティを初期化し、quot;getter" と "setter" メソッドを追加して、変数をメインプログラムにコピーする必要がないようにします。 メソッドを追加することで、メイン プログラムに変数をコピーする必要がなくなります。
  • モジュールに格納された変数を再利用するために、変数を初期化して getter と setter 関数を使用します。セッター関数は、変数をグローバルとして宣言します。 をグローバル変数として宣言します。