0

私は、ファイル名とファイル行を取り、ユーザーが定義した変数を作成するモジュールに取り組んでおり、それは機能します。しかし、変数をグローバル名前空間に配置したいのですが、コードは次のとおりです。

def Int(file, line, variable):
    file = open(file, "r")
    for i in range(line):
        whatToConvert = file.readline()
    file.close
    globals()[variable] = int(whatToConvert)

def Str(file, line, variable):
        file = open(file, "r")
        for i in range(line):
            whatToConvert = file.readline()
        file.close
        globals()[variable] = str(whatToConvert)

def Float(file, line, variable):
        file = open(file, "r")
        for i in range(line):
            whatToConvert = file.readline()
        file.close
        globals()[variable] = float(whatToConvert)

convert をインポートしてから convert.Int("test.txt", 1, "var_1") を実行すると、var ("var_1") は var_1 ではなく convert.var_1 からアクセスできます。グローバル名前空間で var_1 を作成するにはどうすればよいですか?

4

2 に答える 2

0

あなたはクラスが欲しい、仲間。

class Converter:

    def __init__(self, fl, ln, vrbl):
        self.file = fl
        self.line = ln
        self.variable = vrbl


    def to_int(self):
        file = open(self.file, "r")
        for i in range(self.line):
            whatToConvert = file.readline()
        file.close
        return int(whatToConvert)

    def to_str(self):
        file = open(self.file, "r")
        for i in range(self.line):
            whatToConvert = file.readline()
        file.close
        return str(whatToConvert)

    def to_float(self):
        file = open(self.file, "r")
        for i in range(self.line):
            whatToConvert = file.readline()
        file.close
        return float(whatToConvert)


#Instantiation
foo = Converter('\a\path','an int?','')

#This is how you call the class methods.
foo.to_int()
foo.to_str()
foo.to_float()

入力がどのように表示されるかは正確にはわかりませんが、これから必要なものを取得できます。また、クラス定義を他のファイルに保存して、モジュールと同じようにインポートできます。

from filename import Converter

次に、私が書いたように、インスタンス化などを行います。これにより、プログラムで想定していたことが一部変わる可能性がありますが、より簡単になる可能性もあります。

__init__()関数は実行する行で発生します。そこにステートメントを配置してから、 のような名前の変数に値を保存するfoo = Converter('\a\path','an int?','') ことを検討することをお勧めします。次に、クラス内のどこでも を参照できます。がすべてのメソッド定義の最初の引数である ことに注意してください。オブジェクト自体を意味します。あなたが望むことをするクラスを作る方法はたくさんあるかもしれません。openself.variableself.variableselfself

于 2013-05-20T05:39:05.667 に答える
0

globals()のドキュメントでは、モジュール単位のグローバル ディクショナリであることを明示的に述べています。

現在のグローバル シンボル テーブルを表す辞書を返します。これは常に現在のモジュールのディクショナリです (関数またはメソッド内では、これはそれが定義されているモジュールであり、それが呼び出されたモジュールではありません)。

引数として渡すことができglobals()ます (現在のモジュールのグローバルになります)。特にそのような方法でグローバルをいじることは、非常に悪い考えのように見えます。

于 2013-05-20T04:47:04.887 に答える