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

2024-06-16 10:30:15 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: 代码selffalseindexlenreturnif字典
1条回答
网友
1楼 · 发布于 2024-06-16 10:30:15

简称:

您正试图在一个函数中用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 = "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关键字

相关问题 更多 >