- 不要那樣做! ;)
但是,如果你仍然想,我建議你有一箇中間類或函數處理這個給你:
僞代碼:
def printTheNumber(num):
print num
def intermediatePrintTheNumber(input):
num_int_dict = {'one':1, "two":2 ....
if input.isstring():
printTheNumber(num_int_dict[input])
elif input.isint():
printTheNumber(input)
else:
print "Sorry Dave, I don't understand you"
如果這是pythonic
我不知道,但這就是我必須要解決的問題,當然還需要對輸入進行更多的檢查以確定它是否有效。
說到你的評論,你提到語義相似性,即"one"
和1
可能意味着同樣的事情。
你應該問這種類型的轉換在哪裏。
那麼這取決於你的系統的設計,但我可以告訴你,它不應該在一個非常簡單的原因,我叫printTheNumber
相同的功能,這就是那將使功能的方式責任重大。
根據輸入的複雜性,可能是integer 1
或string "1"
或者,在最壞的情況下,"one"
或者甚至更糟"uno"|"one"|"yxi"|"ett" .. and so on
。這應該由一個函數來處理,該函數只有處理映射的數據庫纔有責任。
我會分裂它,讓我有一個函數處理字符串「一」,「兩」...等等,一個處理整數,並有第三個函數,檢查輸入,看看它是否可以轉換爲整數或不。
在我看來,有一個在設計一個fundamental
缺陷警告,如果你要採取措施,對這種複雜的,但你似乎是意識到這一點,所以我不會去左右對它。
我猜測會有一些回覆說:不要那麼做!這可能是一個好建議,但仍然存在一個問題:何時需要在不同形式的語義等價對象之間進行轉換,應該在何處進行轉換?在調用函數中?這可能會導致很多重複的代碼。 – 2013-04-08 15:30:54
提出的具體示例(不是我的代碼,而是由我工作的人編寫的代碼)是文件。以文件作爲參數的函數可以將字符串作爲參數(解釋爲路徑),也可以取實際文件(open()函數的結果)。 在同一代碼中出現的另一個例子是一個函數,它可以接收消息列表或單個消息。後一種情況被解釋爲與長度爲1的列表相同。 我已經給出了這些示例,因此它們可能仍然太抽象了?什麼使他們對你更具體? – 2013-04-08 15:42:09
在第二個示例中,您可以使用'* args'來完全避免檢查(即使存在缺陷)。 – Bakuriu 2013-04-08 15:44:55