我已经全局声明了一个字典,也声明了一个变量。现在,在一个类中访问这两个变量时,我可以访问字典,但是要访问另一个变量,我得到的是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"))
答案 0 :(得分:2)
您正在尝试在一个函数中使用curr_length
更改curr_length = len(str_)
的值,该函数查找局部curr_length
变量,但找不到该变量。它需要行global curr_length
来知道它是一个global
变量。
至于您为什么想知道为什么dict
对象不需要global memoized
行,您应该阅读以下答案:
Global dictionaries don't need keyword global to modify them?或Why is the global keyword not required in this case?
在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()内部定义。
为完成这项工作,我们使用global关键字