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

[python] 作用域

Python中查找变量的顺序遵循LEGB规则(Local->Enclosing->Global->Built-in)。Python中的if/elif/elsefor/while等代码块不会创建新的作用域,只有defclasslambda才会改变作用域。这和C++中不同,C++中在{}代码块中创建的变量离开这个代码块后就会被析构,也即RAII的精髓所在。因此,Python中在iffor/while中创建的变量实际都是函数的局部变量,而不是iffor/while的局部变量。


globalnonlocal

  • 如果想在函数中修改全局变量,可以在函数中声明global;
  • 如果想在嵌套作用域里修改上一层作用域的非全局变量,可以在嵌套作用域中声明nonlocal

例子:

k=1
def fun():
    i=3
    # global k
    while i>0:
        i-=1
        k=3
    print(k)
fun()
print(k)

# 不加global输出:
#  3
#  1
# 加global输出:
#  3
#  3
def foo():
    k=1
    def fun():
        i=3
        # nonlocal k
        while i>0:
            i-=1
            k=3
        print(k)
    fun()
    print(k)
foo()

# 不加nonlocal输出:
#  3
#  1
# 加nonlocal输出:
#  3
#  3
http://www.dtcms.com/a/127388.html

相关文章:

  • BlueNRG-LP v3.x 协议栈主要事件列表与含义解析
  • 玩转ESP32-S3:UDP网络通信技术详解
  • 快速支持DeepSeek-V3-0324,昇思MindSpore+vLLM服务化部署开源版本上线魔乐社区
  • 正则表达式学习笔记
  • 深入理解Softmax函数及其在PyTorch中的实现
  • 2025华为OD真题目录:全流程解析/备考攻略/经验分享/Java/python/JavaScript/C++/C语言/GO六种语言最佳实现
  • 从零开始学Python游戏编程21-Pygame库1
  • DDoS攻击:网络世界的“洪峰考验”与应对逻辑
  • k8s证书续期
  • HarmonyOS-ArkUI V2装饰器@Local装饰器:组件内部状态
  • 2025年ChatGPT最新功能深度解析:从技术升级到应用场景全面解读
  • Lua 中,`math.random` 的详细用法
  • spring:xml方式调用构造方法创建Bean,调用set方法配置字段
  • 视频智能分析平台EasyCVR打造智能视频监控烟火预警系统,助力烟花鞭炮厂坚固安全防线
  • pyautogui是什么:自动化鼠标和键盘操作
  • Laravel 使用 事件和监听器实现 数据状态变更
  • 5分钟用Docker Desktop新功能搭建Python+AI开发环境
  • docker 运行自定义化的服务-后端
  • 渗透测试实战:使用Hydra破解MySQL弱口令(附合法授权流程+防御方案)
  • Cannot find module ‘vue‘ or its corresponding type declarations
  • 实战教程:使用JetBrians Rider快速部署与调试PS5和Xbox上的UE项目
  • 《Vue Router实战教程》3.动态路由匹配
  • 2022年全国职业院校技能大赛 高职组 “大数据技术与应用” 赛项赛卷(4卷)任务书
  • 3D激光轮廓仪知识整理
  • 第3节:深度学习常用数据集介绍
  • 算法--递归实现【DFS】
  • TDengine 语言连接器(Rust)
  • 索尼相机视频文件格式规格
  • JAVA 导出 word
  • Java树结构通用工具类