我正在用Python编写一个严重依赖全局列表变量的应用程序。程序中的每个函数都会对一个或所有这些全局列表应用更改。 在编写代码时,我发现我需要几个函数,涉及全局列表之间元素的移动,所有这些都涉及相同的代码行——因此我编写了一个适当的函子类。在
下面的程序总结了我正在做的事情。我将引用它来描述我的应用程序中出现的问题:
#Global List variables
garbage=[]
paper=[]
metal=None
class movementFunctor:
def __init__(self,source,destination):
self.source=source
self.destination=destination
def __call__(self,item):
self.source.remove(item)
self.destination.append(item)
GtoP=movementFunctor(garbage,paper)
GtoM=movementFunctor(garbage,metal)
PtoM=movementFunctor(paper,metal)
def main():
global garbage,paper,metal
metal=[]
#initialize garbage, paper, and plastic with numbers 0 to 5
for i in range(5):
garbage.append(i)
paper.append(i)
metal.append(i)
GtoP(2)
#Problem Code---------------------------------------------------------------------
PtoM(2)
#Problem Code---------------------------------------------------------------------
main()
我的函子类movementFunctor指定源全局变量列表和目标全局变量列表作为实例变量的参数。然后指定从源到目的地的调用。在
我以为这个设计会成功;但是,我在'PtoM(2)'行中遇到了一个错误
^{pr2}$全局列表之一metal被初始化为None,但main应该为它分配一个新的空列表[]。那么,为什么PtoM函子在分配给它空列表时,会遇到金属被声明为None的问题呢?在
我找不到任何关于将全局变量设置为类的实例变量的问题/复杂性的信息。在
我是新来的堆栈溢出论坛,所以请原谅/指出任何惯例,我没有很好地遵守张贴这个问题。在
您在调用
main
之前创建了PtoM
。当时,metal
为None,因此PtoM
将其目标设置为None。它不会“监视”变量metal
以查看是否分配了其他内容。在解决方案是在开始时分配}和其他人的创建移动到{}内。在
metal = []
,或者在设置metal
之后,将您的{相关问题 更多 >
编程相关推荐