Python 整型变量作用域与设置作用域

问题描述 投票:0回答:1

在下面的代码中,如果我在 for 循环中将

current
定义为整数,那么在 dfs 函数调用期间
current += 1
将出错,并显示“UnboundLocalError:赋值前引用的局部变量 'current_island'”。

def numIslands(grid):
    def dfs(i,j):
        if i < 0 or j < 0 or i >= len(grid) or j >= len(grid[0]):
            return
        if(i,j) in visited or not grid[i][j]:
            return
        visited.add((i,j))
        current += 1
        dfs(i+1,j)
        dfs(i-1,j)
        dfs(i,j+1)
        dfs(i,j-1)
        
    visited = set()
    res = 0
    for i in range(len(grid)):
        for j in range(len(grid[0])):
            current = 0
            dfs(i,j)
            if current_island:
                res = max(len(current_island), res)
    return res

但是如果我将

current
定义为像
current = set()
这样的集合,并在 dfs 中执行
current.add((i,j))
而不是
current += 1
那么就没有问题了。有人可以解释一下原因吗?

python scope
1个回答
0
投票

当您在为局部变量赋值之前尝试使用局部变量时,Python 中会出现“UnboundLocalError:赋值前引用的局部变量‘current_island’”错误。要修复此错误,您需要确保在尝试使用变量“current_island”之前已为其分配了值。在访问之前声明

current_island = False

尝试下面的代码:

def numIslands(grid):
    def dfs(i,j):
        if i < 0 or j < 0 or i >= len(grid) or j >= len(grid[0]):
            return
        if(i,j) in visited or not grid[i][j]:
            return
        visited.add((i,j))
        current += 1
        dfs(i+1,j)
        dfs(i-1,j)
        dfs(i,j+1)
        dfs(i,j-1)
        
    visited = set()
    res = 0
    current_island = False
    for i in range(len(grid)):
        for j in range(len(grid[0])):
            current = 0
            dfs(i,j)
            if current_island:
                res = max(len(current_island), res)
    return res
© www.soinside.com 2019 - 2024. All rights reserved.