在main.py /了解范围中调用方法

时间:2013-12-16 23:51:09

标签: python methods scope call

如何修复以下方案的范围?我的程序的主要代码(在main.py中)最初不在方法中。我想把它放到一个方法中,一旦我把它放在一个方法中并调用它,就会出现错误。

如何将我的主要代码块放入一个运行的方法中,就好像它不在方法中一样。

一般来说,对于python和编程我都是新手,所以请原谅我的无知,请在回答时尽可能简单。谢谢!     导入客户     进口帐户     导入交易

def populate():
    z1 = Customer.Customer("1234","XXXXX","XXXXXXX","XXXXXX","XXXXXX","XXXXXX","XXXXX")
    dict[z1.getCNumber()] = z1
    a1 = Account.Account("4321",True,0.00,700.00)
    dict[z1.getCNumber()].AddAccount(a1)

def printInfo():
    z1.description()
    a1.description()

populate()
printInfo()

这会在printInfo()方法中产生错误。 c1和a1变量。我不明白如何解决它。

错误包括:     全局名称'z1'未定义

当我在顶部放置z1 =“”和a1 =“”时,这是我得到的错误:

z1.description()
AttributeError: 'str' object has no attribute 'description'

如果它不在方法

中,则所有这些都有效

1 个答案:

答案 0 :(得分:3)

a1和z1只存在,直到填充函数结束。之后,噗,他们被删除了计算机的内存。这意味着populate几乎没有任何功能(除了可能稍微旋转处理器)。考虑返回a1和z1的值,然后将它们作为参数提供给printInfo。或者,如果在填充后总是调用printInfo,可能只是将代码放在populate函数中。

另一方面,在您发布的代码中,它看起来并不像是在调用printInfo,而是printBank,因为它没有定义会抛出错误。

要将它们作为元组返回,您可以在populate:

的末尾添加此行
return (a1, z1)

然后当你打电话时,你可以说:

(a, z) = populate()

然后您将printInfo的标题更改为:

printInfo(a1, z1):

所以你会这样称呼:

printInfo(a,z)