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
相关推荐
李昊哲小课14 小时前
fastapi sse websocket 奶茶店实时订单看板
人工智能·python·websocket·网络协议·fastapi·sse
格林威15 小时前
多相机微秒级对齐:硬件触发 vs PTP(IEEE 1588)方案实战对比
开发语言·人工智能·数码相机·机器学习·计算机视觉·视觉检测·机器视觉
初级代码游戏16 小时前
iOS开发 Swift 速记2:三种集合类型 Array Set Dictionary
开发语言·ios·swift
2401_8445829517 小时前
工具包:软件架构设计的实用技巧与经验分享
python
RFID固定资产管理系统17 小时前
适配媒体行业的固定资产管理软件有哪些功能与核心优势
大数据·人工智能·python·媒体
SunnyDays101117 小时前
Python 为 PowerPoint 添加动画:进入、退出、动作路径与文本动画(详解)
python·powerpoint·动画·动画效果·文本动画
峥嵘life18 小时前
Android WiFi 热点 Channel 信道 和 Frequency 频率 转换总结
android·开发语言
wgego18 小时前
基础的反序列化一些总结(php和java)
java·开发语言·笔记
冻柠檬飞冰走茶18 小时前
PTA基础编程题目集 7-8超速判断(C++语言实现)
开发语言·数据结构·c++·算法
难以怀瑾19 小时前
pytest.param`与 allure.dynamic.title()全解析
python