php:
直接在函数内读取全局变量,会报错
$a=111; function func(){ print_r($a); } func();
结果为:Notice: Undefined variable: a in E:qprworkprojectindex.php on line 15
函数内读取局部变量,需要使用关键字"global",在函数中声明了全局变量 $a 之后,对该变量的引用都会指向其全局版本。
正确写法
$a=111; function func(){ global $a;/*使用global*/ print_r($a); } func();
结果为:111
Python:
直接在函数内读取全局变量,不会报错
a=111 def func(): print (a) func()
结果为:111
说一下Python的作用域,以下摘自菜鸟教程
Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。
变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4中,分别是:
- L (Local) 局部作用域
- E (Enclosing) 闭包函数外的函数中
- G (Global) 全局作用域
- B (Built-in) 内建作用域
以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。
上例中,寻找$a,就属于到了第G步,在全局查找.
python中,有一种特殊情况,假设下面这段代码被运行:
a = 10
def test():
a = a + 1
print(a)
test()
以上程序执行,报错信息如下:
Traceback (most recent call last):
File "test.py", line 7, in <module>
test()
File "test.py", line 5, in test
a = a + 1
UnboundLocalError: local variable 'a' referenced before assignment
错误信息为局部作用域引用错误,因为 test 函数中的 a 使用的是局部,未定义,无法修改。而且一旦定义,就是局部变量了
所以,Python中,想在函数内修改全局变量,需要使用关键字global
global 关键字
当内部作用域想修改外部作用域的变量时,就要用到global关键字了。
以下实例修改全局变量 num:
num = 1
def fun1():
global num # 需要使用 global 关键字声明
print(num)
num = 123
print(num)
fun1()
以上实例输出结果:
1
123