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

腐烂的橘子——LEGB 作用域规则

在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一:

  • 值 0 代表空单元格;
  • 值 1 代表新鲜橘子;
  • 值 2 代表腐烂的橘子。

每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。

返回 直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1 。

示例 1:

输入:grid = [[2,1,1],[1,1,0],[0,1,1]]
输出:4

注意:while并不是一种作用域,所以两个time其实是一个time。

from collections import deque
from typing import Listclass Solution:def orangesRotting(self, grid: List[List[int]]) -> int:rows = len(grid)cols = len(grid[0])que = deque()for i in range(rows):for j in range(cols):if grid[i][j] == 2:que.append((i, j,0))time=0while que:x, y, time = que.popleft()if x<rows-1 and grid[x + 1][y] == 1:grid[x + 1][y] = 2que.append((x + 1, y, time + 1))if x>0 and grid[x - 1][y] == 1:grid[x - 1][y] = 2que.append((x - 1, y, time + 1))if y<cols-1 and grid[x][y + 1] == 1:grid[x][y + 1] = 2que.append((x, y + 1, time + 1))if y>0 and grid[x][y - 1] == 1:grid[x][y - 1] = 2que.append((x, y - 1, time + 1))for i in range(rows):for j in range(cols):if grid[i][j] == 1:return -1return time


Python 中变量查找的 LEGB 作用域规则

LEGB 是 Python 中变量查找顺序的缩写。当在 Python 中访问一个变量时,解释器会按照 L → E → G → B 的顺序依次查找变量:

  1. Local(局部作用域)

    • 指函数内部的作用域。

    • 在函数内部定义的变量都属于局部作用域,只能在该函数内部使用。

    • 当函数执行完毕后,局部变量会被销毁。

  2. Enclosing(外部作用域 / 闭包作用域)

    • 指嵌套函数中,外层函数的局部作用域。

    • 当一个函数定义在另一个函数内部时,外层函数的变量对内层函数可见,这些变量就属于外部作用域。

    • 若要在内层函数中修改外层函数的变量,必须使用关键字 nonlocal

  3. Global(全局作用域)

    • 指当前模块(.py 文件)最外层定义的作用域。

    • 在全局定义的变量可以被模块中的所有函数访问。

    • 若要在函数内部修改全局变量,必须使用关键字 global

  4. Built-in(内置作用域)

    • 指 Python 解释器内置的命名空间。

    • 包含了系统内置的函数和异常,如 print()len()id()range() 等。

    • 这些名称在任何作用域下都可以直接使用。


关键字说明

  • global
    在函数内部声明变量为全局变量,允许在函数中修改模块级变量。
    示例:

    x = 10
    def func():global xx = 20
    
  • nonlocal
    在嵌套函数中使用,用于声明变量属于外层函数的作用域(但不是全局作用域),允许在内层函数中修改外层函数的变量。
    示例:

    def outer():a = 1def inner():nonlocal aa += 1
    

总结

  • Python 查找变量时遵循 LEGB 顺序
    Local → Enclosing → Global → Built-in

  • 只有函数、类、模块会创建新的作用域;ifforwhile 不会。

  • 若要在函数中修改外层或全局变量,需显式使用 nonlocalglobal

http://www.dtcms.com/a/507661.html

相关文章:

  • [Linux系统编程——Lesson16.Ext系列⽂件系统]
  • 长尾关键词优化在SEO策略中的重要性与实践技巧
  • 邯郸形象网站建设广州网络推广建站
  • 品牌网站模板速卖通导入WordPress
  • 深入理解 Dubbo 的 ServiceConfig:服务粒度的配置机制
  • 开源 Linux 服务器与中间件(六)服务器--Lighttpd
  • 数据结构——排序的学习(一)
  • 服务器的安全性如何?
  • 新奇特:神经网络速比器,小镇债务清零的算法奇缘
  • 阿里云 OSS MetaQuery 全面升级——新增内容和语义的检索能力,助力 AI 应用快速落地
  • Deepseek新模型Deepseek-OCR, 不仅仅是OCR
  • 重庆网站制作机构怎么建立自己企业网站
  • 律师网站 扁平化扁平化网站 源代码
  • 解耦的艺术:深入理解设计模式之命令模式
  • C# 设计模式——工厂模式
  • 配置电话交换机 3CX 对接微软 Teams 直接路由
  • 亚马逊云渠道商:如何配置 AWS 自动化快照?
  • [优选算法专题四.前缀和——NO.29 和为 K 的子数组]
  • Python Web框架深度对比:Django vs Flask vs FastAPI(含优缺点与选型策略)
  • 盲盒抽谷机小程序:打造个性化消费的梦幻舞台
  • 性能优化揭秘:将淘宝商品 API 响应时间从 500ms 优化到 50ms 的技术实践
  • 龙岩互联网抖音seo招商
  • C++ 智能指针 std::unique_ptr、std::shared_ptr、std::weak_ptr
  • 猿辅导Java面试真实经历与深度总结(三)
  • Doris 数据导入
  • 网站建设+泰安saas建站平台有哪些
  • 动态规划之两个字符组/两个数组的dp问题
  • 【AI论文】UniVideo:面向视频的统一理解、生成与编辑
  • 获取resources目录下静态资源的两种方式
  • 一个域名可以做几个网站吗最好加盟网站建设