簡體   English   中英

第一個arg存在時的Python dict.get()行為,但* default *不存在

[英]Python dict.get() behavior when first arg exists but *default* doesn't

所以,我有一些包含字典的代碼,我在字典上做了一些驗證。 驗證規則基本上是字典可以包含'到'鍵或'到[]'鍵。 無論它包含哪一個,我都需要返回值,這樣我就可以根據字典中另一個鍵的長度來檢查長度。

我實際上找到了解決當前問題的更好方法,但是在解決這個問題時,我在Python 2.7.1中遇到了一個奇怪的行為,這意味着dict.get()不能像我想象的那樣工作,所以在我深入研究字典的C實現之前,我正在尋找一些澄清,我並不急於做:)

簡短的摘要版本似乎是,如果您將默認值傳遞給.get(),即使第一個參數是字典中的有效鍵,Python也會嘗試評估該默認值。

這是一個例子:

>>> toparm = 'to'
>>> toarrparm = 'to[]'
>>> d = {toparm: 'foo'}
>>> d.get(toarrparm, [d[toparm]])
['foo']
>>> d = {toarrparm: ['foo', 'bar']}
>>> d.get(toarrparm, [d[toparm]])
Traceback (most recent call last):
  File "<input>", line 1, in <module>
KeyError: 'to'
>>> d
{'to[]': ['foo', 'bar']}
>>> toarrparm
'to[]'
>>> sys.version
'2.7.1 (r271:86882M, Nov 30 2010, 10:35:34) \n[GCC 4.2.1 (Apple Inc. build 5664)]'
>>> d['to[]'] = ['foo', 'bar', 'baz']
>>> d
{'to[]': ['foo', 'bar', 'baz']}
>>> d.get(toarrparm)
['foo', 'bar', 'baz']
>>> d.get(toarrparm, [d[toparm]])
Traceback (most recent call last):
  File "<input>", line 1, in <module>
KeyError: 'to'
>>> d
{'to[]': ['foo', 'bar', 'baz']}
>>> d['to'] = 'foo'
>>> d.get(toarrparm, [d[toparm]])
['foo', 'bar', 'baz']
>>> 

如果這種行為是舊聞,有人可以解釋為什么會這樣嗎? 我是不是應該總是要求我覺得是不是第一件事? 如果我真的不知道哪一個會在那里怎么辦? 只是回過頭來嘗試/除外? 我錯過了別的什么嗎?

在調用函數之前,始終會評估函數或方法的參數。 如果您不想這樣,那么使用sentinel對象而不是表達式作為默認值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM