在我的代碼中,我有一個值字典以及一個'custom'允許我輸入任意值的鍵。當我列印不是 'custom'它的鍵值時,它仍然會命中該input()欄位:
Ip = {'argon':15.76,
'neon':21.56,
'krypton':14.00,
'xenon':12.13,
'helium':24.59,
'hydrogen':15.42,
'custom': float(input('Enter ionization potential (eV): '))}
print(Ip['argon'], Ip['helium'])
輸出:
Enter ionization potential (eV): 1
15.76 24.59
我的印象是鍵及其相關值在呼叫之前一直被抑制,但顯然我誤解了字典的作業原理。
改善這種情況的一種快速而骯臟的方法是制作條件陳述句,但可能(出于某種原因)有多個input()字典定義,因此我必須為每個定義硬編碼條件陳述句。有沒有更 Pythonic 的方式來做到這一點?
def func(key):
if key == 'custom':
Ip = {key:float(input('Enter ionization potential (eV): '))}
# Is there a way to remove the need for a conditional statement?
else:
Ip = {'argon':15.76,
'neon':21.56,
'krypton':14.00,
'xenon':12.13,
'helium':24.59,
'hydrogen':15.42}
return print(Ip[key])
func('argon')
輸出:
15.76
uj5u.com熱心網友回復:
正如你已經意識到的那樣,它正在被呼叫。當您定義 dict 時,將評估呼叫并將其結果插入到 dict 下'custom',因此在該示例中,'custom': 1.0. 為避免呼叫,請將其改為函式。
現在提出了如何在 dict(浮點數和函式)中混合型別和特殊大小寫函式的問題。解決這個問題的一種方法是使用兩個單獨的 dicts:一個帶有浮點數,一個帶有函式的回退。例如:
def func(key):
ionization_potential = {
'argon': 15.76,
'neon': 21.56,
'krypton': 14.00,
'xenon': 12.13,
'helium': 24.59,
'hydrogen': 15.42}
functions = {
'custom': lambda: float(input('Enter ionization potential (eV): '))}
try:
v = ionization_potential[key]
except KeyError:
f = functions[key]
v = f()
return v
演示:
>>> func('argon')
15.76
>>> func('custom')
Enter ionization potential (eV): 1
1.0
最后,如果在任何一個 dict 中都找不到鍵,這將引發 a KeyErrorfrom KeyError,所以如果我是你,我會ValueError from None在這種情況下引發 a ,因為問題在于引數的值:
try:
f = functions[key]
except KeyError:
raise ValueError(f'key not found: {key!r}') from None
v = f()
演示:
>>> func('foobar')
Traceback (most recent call last):
...
ValueError: key not found: 'foobar'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/318284.html
