为什么全局字典可以在类中访问,而全局整数变量则不能?



我已经全局声明了一个字典和一个变量。现在,当在一个类中访问两者时,我可以访问字典,但对于访问另一个变量,我得到了UnboundLocalError.为了解决这个问题,我使用了代码行:global curr_length然后访问它并运行。但是我想知道为什么普通整数变量需要这行额外的代码,而字典不需要?

代码为:

memoized = {}
curr_length = 0
curr_pal = ""

class Solution:
def check_palindrome(self, str_):
if len(str_) <= 1:
return False
global curr_length
if len(str_) <= curr_length:
return False
if memoized.get(str_, None):
return memoized[str_]
if str_ == str_[::-1]:
memoized[str_] = True
curr_length = len(str_)
return True
memoized[str_] = False
return False
def longest_palindrome(self, str_, starting_index):
if len(str_) <= 1:
return None
n = len(str_)
if self.check_palindrome(str_[starting_index:n]):
return str_
n -= 1
self.longest_palindrome(str_[starting_index:n], starting_index)
def longestPalindrome(self, s: str) -> str:
for starting_index in range(len(s)):
pal = self.longest_palindrome(s, starting_index)
if pal:
return pal
return ""

solution = Solution()
print(solution.longestPalindrome("babad"))

简短:

您正在尝试更改curr_length的值,该函数在查找局部curr_length变量的函数中具有curr_length = len(str_),但找不到它。它需要行global curr_length才能知道它是一个global变量。

至于为什么你想知道为什么dict对象不需要global memoized行,你应该阅读答案: 全局词典不需要关键字全局来修改它们吗?或者为什么在这种情况下不需要全局关键字?

解释:

在 Python 中,在函数外部或在全局范围内声明的变量称为全局变量。这意味着,可以在函数内部或外部访问全局变量。

让我们看一个关于如何在 Python 中创建全局变量的示例。

x = "global"
def foo():
print("x inside :", x)
foo()
print("x outside:", x)

当我们运行代码时,输出将是:

x inside : global
x outside: global

在上面的代码中,我们创建了 x 作为全局变量,并定义了一个 foo(( 来打印全局变量 x。最后,我们调用 foo((,它将打印 x 的值。

如果要更改函数中 x 的值怎么办?

def foo():
x = x * 2
print(x)
foo()

当我们运行代码时,输出将是:

UnboundLocalError: local variable 'x' referenced before assignment

输出显示错误,因为 Python 将 x 视为局部变量,并且 x 也没有在 foo(( 中定义。

为了完成这项工作,我们使用全局关键字

最新更新