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
相关推荐
代码山河3 小时前
Python就业方向全解析:后端、爬虫、数据分析、AI你选哪个?
python·学习·架构·教程·面向对象·项目
在世修行3 小时前
智学文枢:题目流水线
python·多线程·状态机·pyside
C^h3 小时前
c++ string
开发语言·c++
raindayinrain3 小时前
c++高性能--原子操作,无锁编程,操作顺序
开发语言·c++·性能优化
梯度下降者3 小时前
零基础入门Python 爬虫
爬虫·python·数据分析·入门指南·webcrawler
学逆向的3 小时前
C++ 合并命名空间
开发语言·c++·网络安全
Zhao-Jichao4 小时前
VS2026 打包 C++ 程序生成 EXE,借助 Installer Project 扩展工具
开发语言·c++
学逆向的4 小时前
C 局部静态变量
c语言·开发语言·网络安全
大都督会赢的5 小时前
C++第一节课
开发语言·c++
“AI国潮设计-小江”5 小时前
【AIGC实战】Python+Stable Diffusion打造“英歌舞财神”IP,解锁“马到成功”等爆款情绪营销文案设计
开发语言·人工智能·python·prompt·aigc