我試圖解決 Pyhon 3.x 中的動態編程問題。我想創建一個備忘錄字典物件。在為 memo 引數分配默認值后None,檢查Nonewithnot object似乎不起作用,但如果我將其更改為object is None,它作業正常。不起作用,我的意思是這個條件True在 的情況下不會評估not object,并且下面的縮進代碼不會被執行。這會導致 LeetCode 上的 TLE。但是使用is None檢查確實有效,它為備忘錄分配了一個字典,因此快取按預期作業,并且解決方案通過了。
為什么會這樣?
def lcs(i, j, memo = None):
if not memo:
memo = {}
對比
def lcs(i, j, memo = None):
if memo is None:
memo = {}
我用return lcs(0, 0).
編輯:在我的系統 Python IDLE 上,兩個運算式的計算結果都為 True。所以我認為,LeetCode 平臺處理代碼的方式不同。

uj5u.com熱心網友回復:
not是一個等效于 的關鍵字!=。所以它有完全不同的含義。
您可以使用not如下關鍵字(例如)
def lcs(i, j, memo = None):
if memo is not None:
memo = {}
上面的代碼等價于
def lcs(i, j, memo = None):
if memo != None:
memo = {}
如果您想not糟糕地使用關鍵字,請使用此代碼。
def lcs(i, j, memo = None):
if not memo == None:
memo = {}
如果您發現有任何疑問,請告訴我。
uj5u.com熱心網友回復:
來自真值測驗
默認情況下,除非其類定義了回傳 False的bool () 方法或回傳零的len () 方法,否則物件被認為是 true 。
空dict的長度為零,因此也是False。如果您lcs使用備忘錄字典呼叫,但該字典恰好沒有任何內容,它將測驗False并if not memo: memo = {}為您創建一個新的備忘錄物件。該代碼無法區分空備忘錄和無。
if memo is None只有在呼叫者沒有傳入備忘錄時,這是分配備忘錄的正確方法。
uj5u.com熱心網友回復:
自從我使用 Python 以來已經有一段時間了,所以請耐心等待,但我想我可以解釋一般的編程概念。
在第一個中,您正在檢查備忘錄是否不存在。
if not memo
如果備忘錄不存在,則意味著繼續。
在第二個中,您正在檢查備忘錄確實存在并且它設定為無。
if memo is None
如果備忘錄存在則繼續(進入檢查的先決條件)并將其設定為無
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/412379.html
標籤:
