19.1 变量的作用域(掌握)

在编程中,作用域指的是变量可以被访问的范围。在 Python 中,变量的作用域分为局部作用域和全局作用域。

  • 局部作用域(Local Scope):在函数内部定义的变量,只能在该函数内部使用,函数外部无法访问这些变量。
  • 全局作用域(Global Scope):在整个程序中定义的变量,通常位于函数外部,可以在程序的任何位置访问。

19.2 局部变量(掌握)

局部变量是在函数内部定义的变量。它的作用范围仅限于该函数,函数外部无法访问这个变量。局部变量的生命周期在函数执行期间,当函数执行完毕,局部变量也随之销毁。

19.2.1 局部变量的定义和访问

  • 定义:在函数内部直接赋值给变量即定义了局部变量。
  • 访问:只能在定义它的函数内部访问。
  • 示例

    def my_function():
        local_var = 10  # 局部变量
        print("局部变量:", local_var)
    
    my_function()  # 输出: 局部变量: 10
    
    # print(local_var)  # 会引发 NameError,因为函数外无法访问 local_var

在上面的示例中,local_varmy_function() 函数内部的局部变量,它只能在该函数内部使用。函数外部无法访问 local_var,否则会引发 NameError

19.2.2 局部变量的优先级

在函数内部,如果局部变量和全局变量同名,局部变量会优先被使用。局部变量的优先级高于同名的全局变量。

  • 示例

    x = 5  # 全局变量
    
    def my_function():
        x = 10  # 局部变量
        print("函数内部的 x:", x)  # 输出: 函数内部的 x: 10
    
    my_function()
    print("函数外部的 x:", x)      # 输出: 函数外部的 x: 5

在这个示例中,虽然 x 在函数外部被定义为全局变量,但在 my_function() 中重新定义了一个同名的局部变量 x,因此在函数内部会使用局部变量,而不会影响函数外部的全局变量。


19.3 全局变量(掌握)

全局变量是在函数外部定义的变量。全局变量可以在整个程序的任何地方访问,包括函数内部和外部。全局变量的生命周期贯穿程序的执行过程。

19.3.1 全局变量的定义和访问

  • 定义:在函数外部直接赋值给变量。
  • 访问:可以在函数内部和外部访问。
  • 示例

    global_var = 20  # 全局变量
    
    def my_function():
        print("函数内部的全局变量:", global_var)
    
    my_function()  # 输出: 函数内部的全局变量: 20
    print("函数外部的全局变量:", global_var)  # 输出: 函数外部的全局变量: 20

在这个示例中,global_var 是一个全局变量,既可以在 my_function() 函数内访问,也可以在函数外部访问。

19.3.2 使用 global 关键字修改全局变量

在函数内部,可以通过 global 关键字声明一个变量为全局变量,从而修改该全局变量的值。

  • 示例

    count = 0  # 全局变量
    
    def increment():
        global count  # 声明使用全局变量
        count += 1    # 修改全局变量
    
    increment()
    print("全局变量 count 的值:", count)  # 输出: 全局变量 count 的值: 1

在这个示例中,通过 global count 声明 count 为全局变量,从而可以在 increment() 函数中修改 count 的值。

19.3.3 不使用 global 的情况下

如果没有使用 global 关键字直接在函数内部赋值同名变量,Python 会将该变量视为局部变量,不会影响同名的全局变量。

  • 示例

    total = 100  # 全局变量
    
    def reset_total():
        total = 0  # 局部变量,不会影响全局的 total
        print("函数内部的 total:", total)  # 输出: 函数内部的 total: 0
    
    reset_total()
    print("全局的 total:", total)  # 输出: 全局的 total: 100

在这个示例中,函数 reset_total() 中定义的 total 是一个局部变量,并不会影响函数外部的全局变量 total


19.4 全局变量和局部变量的注意事项(掌握)

  1. 避免过度使用全局变量:全局变量在程序的任何地方都可以被修改,可能会导致意外错误。通常建议使用局部变量,除非确有必要才使用全局变量。
  2. global 的使用:如果需要在函数内部修改全局变量,必须使用 global 关键字,否则 Python 会默认将其视为局部变量。
  3. 变量的生命周期:全局变量在程序运行期间始终存在,而局部变量只在函数执行期间有效,函数执行结束后局部变量会被销毁。
  4. 命名冲突:避免在局部作用域中定义与全局变量同名的变量,以免造成混淆。
  5. 可读性问题:过多的全局变量会降低代码的可读性和可维护性,增加调试难度。

19.5 全局变量和局部变量的综合示例(掌握)

以下是一个综合示例,展示全局变量、局部变量和 global 关键字的使用场景。

  • 示例

    balance = 1000  # 全局变量,初始余额
    
    def deposit(amount):
        """存款操作"""
        global balance  # 声明 balance 为全局变量
        balance += amount  # 修改全局变量
        print(f"存款 {amount} 元,当前余额:{balance}")
    
    def withdraw(amount):
        """取款操作"""
        if amount > balance:
            print("余额不足")
        else:
            global balance
            balance -= amount
            print(f"取款 {amount} 元,当前余额:{balance}")
    
    def check_balance():
        """查询余额"""
        print(f"当前余额为:{balance}")
    
    # 操作示例
    deposit(500)      # 存款 500 元
    withdraw(200)     # 取款 200 元
    check_balance()   # 查询余额

在这个示例中,balance 是一个全局变量,用于记录账户余额。deposit()withdraw()check_balance() 是三个函数,分别用于存款、取款和查询余额。deposit()withdraw() 函数通过 global 关键字来声明 balance 为全局变量,从而可以在函数内部修改全局变量 balance 的值。


结束

本文标题: Python3学习笔记第十九篇--全局变量和局部变量

本文链接: https://blog.oyooy.com/archives/65.html

除非另有说明,本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

声明:转载请注明文章来源。

最后修改:2025 年 02 月 08 日
如果觉得我的文章对你有用,请随意赞赏