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

Python 如何在全局命名空间的模块中创建变量?,python,namespaces,Python,Namespaces,我一直在开发一个模块,该模块采用一个文件名和一个文件行,并创建一个由用户定义的变量,它可以正常工作。但我希望变量位于全局命名空间上,代码如下: def Int(file, line, variable): file = open(file, "r") for i in range(line): whatToConvert = file.readline() file.close globals()[variable] = int(whatToCon

我一直在开发一个模块,该模块采用一个文件名和一个文件行,并创建一个由用户定义的变量,它可以正常工作。但我希望变量位于全局命名空间上,代码如下:

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”),那么convert.var_1可以访问var(“var_1”),而不是var_1如何在全局命名空间上创建var_1?

文档明确说明它是一个模块式全局字典

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

您可以将
globals()
作为参数传递(这将是当前模块中的globals)。仍然和全球学生打交道,尤其是这样,看起来是个非常糟糕的主意。

你想要一门课,兄弟

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()
我不知道你的输入应该是什么样子,但是你可以从中得到你想要的。您可以将类定义存储在其他文件中,并像导入模块一样导入它们

从文件名导入转换器

然后你会像我写的那样实例化,等等。这可能会改变您对程序的一些设想,但也可能使它变得更容易


\uuuu init\uuuu()
函数发生在执行
foo=Converter('\a\path','an int?','')的行上。
您可能需要考虑将
open
语句放在那里,然后将值保存在名为
self.variable
的变量中。然后,您可以在类中的任何位置引用
self.variable
。请注意,
self
是每个方法定义的第一个参数<代码>自身表示对象本身。可能有很多方法可以使类满足您的要求。

鉴于您的
to_x
方法根本不使用
self
,我很确定他只是想要一堆函数。Python不是Java,在Java中,你必须创建假类来将真正应该是函数的东西组合在一起。如果一个类想在不同的函数之间共享相同的数据,我认为这是最有意义的,正如他所暗示的。我确实使用了
self