我正在研究python中的模块使用,并且以为我会回答Markus在上面的评论中提出的问题(“当嵌入在模块中时如何导入变量”)从两个角度来看:
>变量/函数,和
>类属性/方法。
这里是如何重写主程序f1.py来演示对Markus的变量重用:
import f2
myStorage = f2.useMyVars(0) # initialze class and properties
for i in range(0,10):
print "Hello, "
f2.print_world()
myStorage.setMyVar(i)
f2.inc_gMyVar()
print "Display class property myVar:", myStorage.getMyVar()
print "Display global variable gMyVar:", f2.get_gMyVar()
这是我如何重写可重用的模块f2.py:
# Module: f2.py
# Example 1: functions to store and retrieve global variables
gMyVar = 0
def print_world():
print "World!"
def get_gMyVar():
return gMyVar # no need for global statement
def inc_gMyVar():
global gMyVar
gMyVar += 1
# Example 2: class methods to store and retrieve properties
class useMyVars(object):
def __init__(self, myVar):
self.myVar = myVar
def getMyVar(self):
return self.myVar
def setMyVar(self, myVar):
self.myVar = myVar
def print_helloWorld(self):
print "Hello, World!"
在这里执行f1.py是输出的样子:
%run "f1.py"
Hello,
World!
Hello,
World!
Hello,
World!
Hello,
World!
Hello,
World!
Hello,
World!
Hello,
World!
Hello,
World!
Hello,
World!
Hello,
World!
Display class property myVar: 9
Display global variable gMyVar: 10
我认为马库斯的观点是:
>要重复使用模块的代码多次,将模块的代码放入功能或类,要重新存储为模块中的属性的变量,请初始化类中的属性,然后添加“getter”和“setter”方法变量不必复制到主程序中,>要重用存储在模块中的变量,初始化变量并使用getter和setter功能。 setter函数将声明变量为全局变量。