为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

侃侃无极 2022-06-02 10:33:17
我已经声明了一个全局字典和一个变量。现在,当在一个类中访问两者时,我可以访问字典,但要访问另一个变量,我会得到UnboundLocalError. 为了解决这个问题,我使用了代码行:global curr_length然后访问它并运行它。但我想知道为什么普通整数变量需要这行额外的代码,而字典不需要?代码是:memoized = {}curr_length = 0curr_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"))
查看完整描述

1 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

短的:

您正在尝试在查找局部变量但找不到它的函数内更改curr_lengthwith的值。它需要该行知道它是一个变量。curr_length = len(str_)curr_lengthglobal curr_lengthglobal


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


解释:

在 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关键字


查看完整回答
反对 回复 2022-06-02
  • 1 回答
  • 0 关注
  • 81 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信