我一直在研究一个采用文件名和文件行的模块,并创建一个由用户定义的变量,它可以工作。但是我希望变量位于全局命名空间这里是代码:
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 ?
答案 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
表示对象本身。可能有很多方法可以创建一个满足你想要的类。