#coding=utf-8
#函数变量作用域
#变量的查找原则 LEGB 原则
# LOCAL 内部区域
# E enclosing 外面嵌套函数的作用域
# G global 全局变量
# B built-in 内建作用域
#全局和局部变量
#局部变量 只能在被声明的函数内部访问, 全局变量 可以在整个程序访问, 定义在函数外的变量
result = 1000
def sum(a,b):
result = a + b
print "in result is:%d"%result
return result
sum(1000,2000)
print "out result is:%d"%result
#global 和 nonlocal
#当内部作用域 修改 外部作用域的变量时, 就要用这两个关键字了。
result = 1000
def sum():
print "in result is:%d"%result
return result
sum()
print "out result is:%d"%result
#这里就是直接使用全局变量 result
#但是这里的 result在sum 函数中没有被改变,所以没有声明,直接在用全局变量
# 若要修改全局变量,就需要在函数sum声明该变量 result
# 如不想修改,只是使用,不声明也可以,
# 如果你要用变量result 又要只是内部使用,那就在内部在定义一个result变量 ,这就和第一个例子一样了
result = 1000
def sum():
global result
result += 1
print "in result is:%d"%result
return result
sum()
print "out result is:%d"%result
#nonlocal 这个是3版本的关键字 ,2.7 的版本没有这个关键字
def func():
count = 1
def func_in():
#这里的nonlocal 是3版本的关键字
nonlocal count
count =12
print "in count is:%d"%count
func_in()
return count
func()