我已经声明了一个全局字典和一个变量。现在,当在一个类中访问这两个变量时,我可以访问字典,但是对于访问另一个变量,我得到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 = len(str_)
更改curr_length
的值,该函数查找局部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作为全局变量,并定义了foo()来打印全局变量x。最后,我们调用foo(),它将打印x的值
如果你想改变函数中x的值呢
当我们运行代码时,输出将是:
UnboundLocalError: local variable 'x' referenced before assignment
输出显示错误,因为Python将x视为局部变量,并且x也没有在foo()中定义
为了实现这一点,我们使用global关键字
相关问题 更多 >
编程相关推荐