亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么全局字典可以在類內部訪問,而全局整數變量不能?

為什么全局字典可以在類內部訪問,而全局整數變量不能?

侃侃無極 2022-06-02 10:33:17
我已經聲明了一個全局字典和一個變量?,F在,當在一個類中訪問兩者時,我可以訪問字典,但要訪問另一個變量,我會得到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 關注
  • 97 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號