如何在全局命名空间的模块中创建变量?

时间:2013-05-20 04:33:40

标签: python namespaces

我一直在研究一个采用文件名和文件行的模块,并创建一个由用户定义的变量,它可以工作。但是我希望变量位于全局命名空间这里是代码:

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 ?

2 个答案:

答案 0 :(得分:0)

globals()的文档明确声明它是一个模块明智的全局字典

  

返回表示当前全局符号表的字典。这个   始终是当前模块的字典(在函数内部或   方法,这是定义它的模块,而不是模块   它被称为。)

您可以将globals()作为参数传递(这将是当前模块中的全局变量)。仍然搞乱全局变量,特别是以这种方式,看起来是个坏主意。

答案 1 :(得分: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语句放在那里,然后将值保存在名为{{1}的变量中}。然后在课堂的任何地方,您都可以参考self.variable。请注意,self.variable是每个方法定义的第一个参数。 self表示对象本身。可能有很多方法可以创建一个满足你想要的类。