Python 知识量:10 - 41 - 150
变量的作用域是指它在程序的哪些地方是可访问或使用的。这一规定对于保护数据和提供编程灵活性大有益处。Python中的变量按照作用域分可分为2种:
局部变量
全局变量
在Python中,首次赋值发生在函数内的变量称为局部变量。局部变量只能在其所属的函数内使用,在函数外部不能访问。当函数运行结束后,其局部变量将被自动删除。以下是一个示例:
# local.py def add(a,b,c): s=a+b+c return s def sub(a,b): s=a-b return s
在以上代码中,函数add中的变量s是其局部变量。此外参数也被视为局部变量,因此,函数add有4个局部变量:a、b、c、s。函数sub有3个局部变量:a、b、s。
需要注意的是,虽然函数add和sub中都有同名变量a、b、s,但实际上它们是不同的变量,只是正好名称相同而已。正因为作用域的限制,它们之间互不影响。
在函数外面声明的变量称为全局变量,在程序中的任何地方都可以访问它。正因如此,修改全局变量时应当非常小心。以下是一个示例:
# global.py name='Jeff' def hello(): print('Hello '+name+' !') def change(newName): name=newName
运行结果为:
>>> ===================== RESTART: D:\PythonTestFile\global.py ===================== >>> hello() Hello Jeff ! >>> change('Bob') >>> hello() Hello Jeff !
在以上代码中,首先创建了一个全局变量name,并初始化其值为“Jeff”。然后定义了一个打印name值的函数hello(),在其函数体中直接引用了变量name。最后又定义了一个用于改变name值的函数change()。
但是,程序的运行结果与期望的不太一致。第1次调用函数hello()得到的结果是符合预期的,但当调用了函数change(),修改了name值后,再次调用函数hello()得到的值却不是新值。究其原因是在函数change()中,变量name被视为了局部变量,即Python认为重新定义了一个局部变量name。如果要访问全局变量name,需要使用关键字global。修改后的代码如下:
# global.py name='Jeff' def hello(): print('Hello '+name+' !') def change(newName): global name name=newName
运行结果为:
>>> ===================== RESTART: D:\PythonTestFile\global.py ===================== >>> hello() Hello Jeff ! >>> change('Bob') >>> hello() Hello Bob !
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6