我對Python比較陌生,想知道我是否在重新發明輪子或以非pythonic方式做事 - 讀錯了。基於字典的switch-like語句與動作
我正在重寫最初寫在Lua中的一些解析器。有一個函數接受來自導入表及其值的字段名稱,對值進行一些操作並將其存儲在目標字典中的適當鍵名下。
在原始代碼中,它是通過具有匿名函數的長開關式語句作爲動作解決的。 Python代碼如下所示:
class TransformTable:
target_dict = {}
...
def mapfield(self, fieldname, value):
try:
{
'productid': self.fn_prodid,
'name': self.fn_name,
'description': self.fn_desc,
...
}[fieldname](value)
except KeyError:
sys.stderr.write('Unknown key !\n')
def fn_name(val):
validity_check(val)
target_dict['Product'] = val.strip().capitalize()
...
每一個「現場處理」功能做不同的動作,並存儲在不同的密鑰在target_dict,當然。 由於Python不支持帶語句的匿名函數(或者我錯過了某些東西?),函數必須單獨編寫,代碼不易讀且不必要的複雜。
任何提示如何以更優雅和更pythonic的方式做這樣的任務表示讚賞。
THX
大衛
你可能還想花一些努力避免在發佈之前通過搜索類似的問題來重新發現問題。 – martineau 2010-10-21 08:15:16