我现在正在研究 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 函数会将变量声明为全局变量。