5.2 作用域
作用域(scope)决定一个变量能在哪里被访问。理解作用域后,你会更容易看懂函数内部变量和外部变量之间的关系。
局部变量
定义在函数内部的变量称为局部变量(local variable)。它只能在函数内部访问。函数执行结束后,这些局部变量就会被销毁。函数参数也是函数内部的局部变量。
下面的 swap() 看起来交换了 a 和 b,但它交换的是自己的局部变量。可以把 main() 和 swap() 想成两个不同的房间:两个房间里都可以有叫 a 的盒子,但它们不是同一个盒子。
python
def swap(a, b):
a, b = b, a
print("函数内部:a = %d,b = %d" % (a, b))
def main():
a, b = 1, 2
print("交换前:a = %d,b = %d" % (a, b))
swap(a, b)
print("交换后:a = %d,b = %d" % (a, b))
if __name__ == "__main__":
main()运行结果:
text
交换前:a = 1,b = 2
函数内部:a = 2,b = 1
交换后:a = 1,b = 2正在加载交互实验...
正在加载概念检查...
全局变量
定义在函数外部的变量称为全局变量(global variable)。全局变量的生命周期贯穿整个程序。
如果要在函数内部修改全局变量,需要使用 global 关键字(global keyword)声明。
python
a, b = 1, 2
def swap():
global a, b
a, b = b, a
print("函数内部:a = %d,b = %d" % (a, b))
def main():
print("交换前:a = %d,b = %d" % (a, b))
swap()
print("交换后:a = %d,b = %d" % (a, b))
if __name__ == "__main__":
main()运行结果:
text
交换前:a = 1,b = 2
函数内部:a = 2,b = 1
交换后:a = 2,b = 1全局变量不是不能用,但要谨慎。大量使用全局变量会让函数之间产生隐藏依赖,程序会更难排错。
正在加载概念检查...
正在加载本节练习...