当前位置: 首页 > 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

相关文章:

  • 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
  • 公司网站建设应符合哪些法规/品牌推广策划
  • 成都网站的优化/重庆seo网站建设
  • 网站网页制作教程/企业品牌网站营销
  • 网络公司网站图片/qq引流推广平台
  • 青海 住房和建设厅网站/seo网站外链平台
  • java jsp做网站/国外seo网站