php与Python函数内读取局部变量的区别

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
原文地址:https://www.cnblogs.com/ch459742906/p/6946269.html