作用域
全局变量的作用域为整个程序,而局部变量的作用域为当前函数或循环等
x = 50 # 全局变量(外层)
def foo(x):
print('x is',x)
# 第二种输出
# print('x is {}'.format(x))
x = 2 # 局部变量
print('x is {}'.format(x))
# def boo(x):
# y = 0
# y = y + 1 # A函数不能直接引用B函数的局部变量 也就是说局部函数不能引用局部函数
foo(x) # x is 50
# 全局变量传入函数,局部变量打印了一次全局变量
# 又声明了一个新的局部变量并打印了一次
print('x is {}'.format(x)) # 调用外部函数
# 外部变量:函数之外的变量。
# 局部变量local variable:函数内定义变量
# 局部变量的作用域:局部变量的函数内。声明函数之间不能互相调用各自的局部变量。
# 外部直接调用内部变量会报NameError错误。函数内按块级作用域判断。
作用域链
name = '小明'
def f1():
name = '小李'
def f2():
# name = '小红'
print(name)
f2()
f1()
# 作用域嵌套:例如上例全局套着函数1,函数1套着函数2。调用变量时会现在当前函数作用域中查找,如果找不到的话会去上一级函数的作用域中查找。 当前层< 父层< 最外层全局。
# 平时代码应该避免函数复杂嵌套,变量作用域把握不准时声明不同名字的变量。
# 练习
name = '小明'
def f1():
print(name)
def f2():
name= '小红'
f1()
f2()
# 4内置作用域
# 在上面的例子中,你可以在任何地方使用print type abs一些函数,函数其实是一个指向功能的变量。这些函数的作用域是内置作用域。
# 作用域范围从小到大: 内层局部 < 外层局部 < 全局 < 内置全局