我正在努力在多个函数中使用变量(在赋值之前引用变量!)

时间:2015-02-21 07:56:07

标签: python python-2.7 variables

我是Python的新手,我真的很喜欢这些代码。我正在尝试重新创建一个人口模拟器,我在Python中看到了我的朋友。它非常基本,目前只使用3个变量。这是我的代码:

pop = 7000000000
int = 5

#Clear
def cls():
    print "\n" * 80

#Main script
def MS():
    cls()
    print "Population =", pop, "Intelligence =", int
    print ""
    print "Do You:"
    print "A) Increase Population"
    print "B) Increase Intelligence"
    choice = raw_input("Option:")
    if choice == "a" :
        print "option a"
    elif choice == "A" :
        print "option A"
    elif choice == "b" :
        intel()
    elif choice == "B" :
        intel()

#Increase Intelligence
def intel():
    int = int + 3

MS()

我正在Code-Academy学习Python,并且正在使用Python 2.7.2版本在他们的实验室中测试我的代码。 Int是我的智能变量和intel我的智能增加功能名称。我想知道为什么我得到"本地变量' int'在转让前引用"当我调用int()函数以及如何修复它并且能够在多个函数中使用我的变量时出错。我只想修改int变量并将其增加3,并在另一个函数中执行类似操作。请记住,我只有15,所以试着简化你的回答,所以我理解,因为当我搜索解决方案时,我发现很多东西令人困惑。我还没有创建选项A功能,但它具有类似的属性。

编辑:谢谢你们的快速反应。我现在知道了。它确实有帮助!

2 个答案:

答案 0 :(得分:4)

popint并在任何函数外部分配,称为全局变量。在函数内分配的变量称为局部变量。要分配给函数内的全局变量,必须先将其声明为全局变量:

def intel():
    global int
    int = int + 3

请注意int是Python中类型的名称,不应该用作变量名:这将导致以后出现问题:

>>> int
<type 'int'>
>>> int(5.1)      # this works
5
>>> int=1
>>> int(5.1)      # now it is broken
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable

这称为 shadowing builtins ,应该避免使用。使用其他变量名称。

答案 1 :(得分:1)

Python中,仅在函数内引用的变量是隐式全局变量。如果在函数体内的任何位置为变量分配了一个新值,则假定它是一个局部变量。如果变量在函数内部被赋予了新值,则该变量是隐式本地变量,您需要将其显式声明为“全局”。

修改你的intel(),如下所示

def intel():
    global int
    int = int + 3