如果在函数里面定义了一个变量, 它只在函数里面有用, 和函数外面同名的变量完全没关系.

大家注意, 是函数里定义了一个变量! 如果只是在函数里使用一个变量, 那么这个变量可能就是函数外的变量.

局部变量

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# 局部变量
l = range(3)
print l

def f():
    l = range(4)
    print l

f()
print l  # [0, 1, 2].  l并没有变化.

全局变量

#!/usr/bin/env python
# -*- coding: utf-8 -*-

l = range(3)
print l

def f():
    global l  # 这里指明了l是一个全局变量, 它就是函数外面定义的那个l
    l = range(4)
    print l

f()
print l  # [0, 1, 2, 3].  函数里面改变了函数外面的l.

函数里面没有用global指明, 但还是影响了外面的变量

这里涉及了引用的概念, 我们会在后面介绍. 这是个比较有坑的地方, 大家要注意

#!/usr/bin/env python
# -*- coding: utf-8 -*-

l = range(3)
def f():
    print l
    l.append(4)
    print l
f()
print l  # [0, 1, 2, 3].  函数里面改变了函数外面的l.