当前位置: 首页 > news >正文

【Python】python系列之函数作用域

Python 系列文章学习记录:

Python系列之Windows环境安装配置_开着拖拉机回家的博客-CSDN博客

Python系列之变量和运算符_开着拖拉机回家的博客-CSDN博客

Python系列之判断和循环_开着拖拉机回家的博客-CSDN博客

Python系列之字符串和列表_开着拖拉机回家的博客-CSDN博客

Python系列之文件操作和函数_开着拖拉机回家的博客-CSDN博客

Python系列模块之标准库OS详解_开着拖拉机回家的博客-CSDN博客

Python系列模块之标准库re详解_开着拖拉机回家的博客-CSDN博客

Python系列模块之标准库json详解_开着拖拉机回家的博客-CSDN博客

Python系列模块之标准库shutil详解_开着拖拉机回家的博客-CSDN博客

Python系列模块之pymysql操作MySQL 数据库_开着拖拉机回家的博客-CSDN博客

Python系列之面向对象编程_python面向对象编程-CSDN博客

 Pythonpython系列之函数闭包概念_python闭包函数-CSDN博客


一、LEGB 规则


LEGB 规则是 Python 查找变量的顺序,即当在代码中引用一个变量时,Python 会按照以下顺序在不同的作用域中查找该变量:

  • Local(局部作用域):函数内部定义的变量和参数,只在函数内部可见。
  • Enclosing(闭包作用域):嵌套函数中,内部函数可以访问外部函数的局部变量,这些外部函数的局部变量所在的作用域就是闭包作用域。
  • Global(全局作用域):在模块级别定义的变量和函数,在整个模块内都可以访问。
  • Built - in(内置作用域):Python 内置的函数和变量,如 printlen 等,在任何地方都可以访问。

二、作用域实例


2.1 局部作用域(Local)

局部作用域是指函数内部的作用域,函数内部定义的变量和参数只能在该函数内部访问。

def test_function():# 局部变量local_variable = 10print(local_variable)test_function()
# 以下代码会报错,因为 local_variable 是局部变量,在函数外部无法访问
# print(local_variable)

2.2 闭包作用域(Enclosing)

当一个函数嵌套在另一个函数内部,并且内部函数引用了外部函数的局部变量时,就形成了闭包。内部函数可以访问外部函数的局部变量,即使外部函数已经执行完毕。

def outer_function():# 外部函数的局部变量enclosing_variable = 20def inner_function():# 内部函数可以访问外部函数的局部变量print(enclosing_variable + 1)return inner_functionclosure = outer_function()
closure()

2.3 全局作用域(Global)

全局作用域是指在模块级别定义的变量和函数,在整个模块内都可以访问。可以使用 global 关键字在函数内部修改全局变量。

# 全局变量
def modify_global():global global_variable  # 申明修改全局变量global_variable = 50  # 函数内部修改全局变量return global_variableprint(global_variable)
print(modify_global())

2.4 内置作用域(Built - in)

内置作用域包含了 Python 内置的函数和变量,如 printlenint 等,这些函数和变量在任何地方都可以直接使用。

# 使用内置函数 len
my_list = [1, 2, 3]
length = len(my_list)
print(length)

2.5 作用域的嵌套和查找顺序

当在代码中引用一个变量时,Python 会按照 LEGB 规则从内到外依次查找该变量。如果在局部作用域中找到了该变量,则使用该变量;如果没有找到,则继续在闭包作用域中查找,以此类推。

# 全局变量
x = 10def outer():# 闭包作用域变量x = 20def inner():# 局部变量x = 30print(x)  # 输出 30inner()print(x)  # 输出 20outer()
print(x)  # 输出 10
  • 在上述代码中,inner 函数内部的 print(x) 会先在局部作用域中查找 x,找到局部变量 x = 30 并输出;
  • outer 函数内部的 print(x) 会在闭包作用域中查找 x,输出闭包作用域变量 x = 20
  • 最后,在全局作用域中调用 print(x) 会输出全局变量 x = 10

相关文章:

  • Linux head 命令
  • LINUX 619 NFS rsync
  • 嵌入式开发之freeRTOS移植
  • 令牌总线的工作原理
  • 声网对话式 AI:开启我的编程进阶之旅
  • 基于Python的房屋信息可视化及价格预测系统
  • 【程序员AI入门:趋势】22、AI发展全景解析:技术演进、行业变革与未来趋势深度洞察
  • 【MySQL】SQL基础
  • 分布变化的模仿学习算法
  • WEB3 的 WebSocket Provider连接方式
  • 模拟IC设计基础系列8-版图设计基础
  • ubuntu 系统 pgm图片和png相互转化
  • Spring-Maven
  • Tensorflow C++ API从入门到放弃
  • 第五届信息技术与当代体育国际学术会议(TCS 2025)
  • JavaWeb-1 概述
  • 微信小程序form表单手机号正则检验pattern失效
  • Cordova + Vue 移动端视频播放组件(支持 HLS + 原生播放器兜底)
  • 腾讯云TCCP认证考试报名 - TDSQL数据库交付运维高级工程师(MySQL版)
  • 五子棋流量主小程序单模式多模式开源版
  • 视频网站怎么做防盗链/百度指数查询app
  • 做58同城这样的网站/百度seo是啥
  • 那个网站可以做数学题赚钱/关键词智能优化排名
  • 云南省建设培训网站/牛推网络
  • 坪地网站制作/如何做平台推广赚钱
  • 网站开发 语言net/推广任务接单平台