zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Java9模块化(Jigsaw)初识
    Java9 modules (Jigsaw)模块化迁移
    Java数据库连接——JDBC调用存储过程,事务管理和高级应用
    面向对象编程(三)——程序执行过程中内存分析
    面向对象编程(十)——继承之Super关键字及内存分析
    面向对象编程(十二)——final关键字
    项目管理利器——Maven阅读目录
    深入分析Java的序列化与反序列化
    Java提高篇——Java 异常处理
    怎么运行Typescript
  • 原文地址:https://www.cnblogs.com/ch459742906/p/6946269.html
Copyright © 2011-2022 走看看