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") 可以通过 convert.var_1 而不是 var_1 访问我如何在全局命名空间上创建 var_1?

4

2 回答 2

0

globals()的文档明确指出它是一个模块式全局字典

返回表示当前全局符号表的字典。这始终是当前模块的字典(在函数或方法中,这是定义它的模块,而不是调用它的模块)。

globals()您可以作为参数传递(这将是当前模块中的全局变量)。仍然搞乱全局变量,尤其是这样,看起来是个非常糟糕的主意。

于 2013-05-20T04:47:04.887 回答
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?','') 您可能要考虑将open语句放在那里,然后将值保存在名称为self.variable. 然后在课堂上的任何地方你都可以参考self.variable。请注意,这self是每个方法定义的第一个参数。 self表示对象本身。可能有很多方法可以让课程做你想做的事。

于 2013-05-20T05:39:05.667 回答