python作用域

1、名称空间namespace:存放名字的地方,是对栈区的划分

  • 有了命名空间之后,就可以在栈区存放相同的名字

2、作用域(Scope)是指在程序中定义变量或函数时,这些变量或函数可被访问的范围。在不同的作用域中,变量和函数的可见性和访问性是不同的。

3、当访问一个变量时,Python 会按照 LEGB 的顺序进行查找,直到找到第一个匹配的变量,然后停止查找。如果在所有作用域中都找不到变量的定义,就会引发 NameError。

L(Local):局部作用域。包括函数内部定义的变量和参数。在函数内部最先进行变量查找。

E(Enclosing):嵌套函数的父函数的作用域。如果在当前函数内部找不到变量,就会向上一层嵌套的函数中查找。

G(Global):全局作用域。在模块层次定义的变量,对于整个模块都是可见的。

B(Built-in):内置作用域。包括 Python 的内置函数和异常。

python 复制代码
x = 10  # 全局作用域
# 嵌套模型的内部函数类似于局部作用域,若么有返回值,会在函数执行结束后被释放,在内存中就不存在该值
def outer_func():
    x = 20  # 外部函数作用域   
    def inner_func():
        x = 30  # 内部函数作用域
        print(x)  # 在内部函数中访问变量 x
        
    inner_func()

outer_func()
print(x)  # 在全局作用域中访问变量 x
inner_func()# 无法使用,必须需要返回值才可以调用

与函数相关的变量尽量放在函数中,防止全局变量污染

  • global关键字用于在函数内部声明一个变量为全局变量,表示在函数内部对该变量的修改将影响到全局作用域中的变量。例如:
python 复制代码
x = 10 
def my_function(): 
    global x 
    x = 20 
    print(x) 
my_function() # 输出结果为 20 
print(x) # 输出结果为 20

在函数my_function内部,使用global关键字声明了变量x为全局变量,然后对其进行了修改。这样,变量x的作用域扩展到了全局范围,所以在函数外部也可以访问到修改后的值。

  • nonlocal(一般配合嵌套结构使用)关键字用于在函数内部声明一个变量为非本地变量,表示在函数内部对该变量的修改将影响到上一级的嵌套作用域中的变量。例如:
python 复制代码
def outer_function(): 
    x = 10 
    def inner_function(): 
        nonlocal x 
        x = 20 
        print(x) 
    inner_function() # 输出结果为 20 
    print(x) # 输出结果为 20 
outer_function()

在inner_function内部,使用nonlocal关键字声明了变量x为非本地变量,然后对其进行了修改。这样,变量x的作用域扩展到了outer_function的作用域,所以在outer_function内部和外部都可以访问到修改后的值。

面试题:局部变量 和 全局变量的区别?

  1. 定义位置不同.
  • 局部变量: 定义在函数内 或者 函数形参列表中的 变量.
  • 全局变量: 定义在函数外的变量, 或者用 global 关键字修饰的变量.
  1. 在内存中的存储位置不同.
  • 局部变量: 存储在 堆区.
  • 全局变量: 存储在 方法区.
  1. 生命周期不同.
  • 局部变量: 随着函数的调用而存在, 随着函数的调用完毕而消失.
  • 全局变量: 随着 .py文件加载而存在, .py文件从内存中移除而消失.
  1. 函数返回值------return

使用return语句可以将一个值或对象作为函数的返回值返回。这个返回值可以是任何有效的Python对象,例如数字、字符串、列表、字典等。函数执行到 return 语句时,会立即结束函数的执行,并将指定的返回值传递给调用者。

如果函内没有return,默认返回None,代表没有什么结果返回

下面是一个简单的函数示例,演示了如何使用返回值:

python 复制代码
# 案例1 
def add_numbers(a, b): 
    s = a + b 
    return s 
result = add_numbers(3, 5) 
print(result) # 输出: 8
相关推荐
Katecat996632 小时前
矿井地雷检测与识别:Yolo11-HAFB-1模型应用详解
python
阿里嘎多学长2 小时前
2026-02-15 GitHub 热点项目精选
开发语言·程序员·github·代码托管
维度攻城狮2 小时前
Python控制系统仿真案例-串联PID控制
python·simulink·pid·串级pid
嵌入式×边缘AI:打怪升级日志2 小时前
第十一章:主控访问多个传感器(Modbus 网关/桥接器设计)
开发语言·javascript·ecmascript
~央千澈~2 小时前
抖音弹幕游戏开发之第10集:整合 - 弹幕触发键盘操作·优雅草云桧·卓伊凡
开发语言·python·计算机外设
Laughtin2 小时前
macos的python安装选择以及homebrew python的安装方法
开发语言·python·macos
默凉2 小时前
C++ 编译过程
开发语言·c++
csbysj20202 小时前
C 标准库 - `<errno.h>`
开发语言
kong79069282 小时前
PySpark简介
python·pysark