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
相关推荐
学测绘的小杨12 小时前
CompassFusion:一个从 GNSS 到 GNSS/INS 组合导航的独立工程包
python
zzzzzz31018 小时前
当产品经理说这个很简单:我用Python自动化处理奇葩需求的实战指南
python·pycharm·产品经理
雪隐19 小时前
个人电脑玩AI-06让5060 Ti给你打工——不光能画画,Qwen3-TTS还能学人说话,连我老板都信了!
人工智能·后端·python
兵慌码乱1 天前
面向桌面端的资产管理系统分层架构设计与核心模块实现
python·系统架构·sqlite·pyqt5·数据库设计·桌面应用开发·mvc架构
hboot1 天前
AI工程师第三课 - 机器学习基础
python·scikit-learn·kaggle
顾林海2 天前
Agent入门阶段-编程基础-Python:流程控制
python·agent·ai编程
呱呱复呱呱2 天前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django
曲幽2 天前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
荣码2 天前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
兵慌码乱2 天前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理