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

我已经声明了一个全局字典和一个变量。现在,当在一个类中访问两者时,我可以访问字典,但要访问另一个变量,我会得到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"))


侃侃无极
浏览 82回答 1
1回答

Cats萌萌

短的:您正在尝试在查找局部变量但找不到它的函数内更改curr_lengthwith的值。它需要该行知道它是一个变量。curr_length = len(str_)curr_lengthglobal curr_lengthglobal至于为什么您想知道为什么dict对象不需要global memoized行,您应该阅读以下答案: 全局字典不需要关键字 global 来修改它们?或者为什么在这种情况下不需要全局关键字?解释:在 Python 中,在函数之外或在全局范围内声明的变量称为全局变量。这意味着,可以在函数内部或外部访问全局变量。让我们看一个关于如何在 Python 中创建全局变量的示例。x = "global"def foo():&nbsp; &nbsp; print("x inside :", x)foo()print("x outside:", x)当我们运行代码时,将输出:x inside : globalx outside: global在上面的代码中,我们创建了一个全局变量 x 并定义了一个 foo() 来打印全局变量 x。最后,我们调用 foo() 来打印 x 的值。如果你想在函数中改变 x 的值怎么办?def foo():&nbsp; &nbsp; x = x * 2&nbsp; &nbsp; print(x)foo()当我们运行代码时,将输出:UnboundLocalError: local variable 'x' referenced before assignment输出显示错误,因为 Python 将 x 视为局部变量,并且 x 也未在 foo() 中定义。为了完成这项工作,我们使用global关键字
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python