![](/img/trans.png)
[英]How to handle different input types with the same actions pythonically?
[英]How to have different input types for the same function?
我想做的基本想法是:
def aFuncion(string = '', dicti = {}):
if len(str) > 0:
print 'you gave string as input'
if len(dicti) > 0:
print 'you gave a dict as input'
aFunction(string = 'test')
dict['test'] = test
aFunction(dicti = dict)
我知道這種想法在更多OO類型的語言中是可能的,但這在python中也是可能的嗎?
現在我正在做
def aFuncion(input):
if type(input) == str:
print 'you gave string as input'
if type(input) == dict:
print 'you gave a dict as input'
aFunction('test')
但我希望在調用函數時能夠清楚區別
這個想要“在調用函數時要明確區別”的目標並沒有與語言的設計理念相提並論。 谷歌“鴨子打字”了解更多相關信息。 接受的輸入應該通過函數的文檔字符串清楚,這就是你需要做的。
在python中,當你想要輸入它是一個字符串或一個字典時,那么你只需要編寫代碼,該代碼假定輸入將是一個對象,其行為類似於字符串或類似dict的方式。 如果輸入沒有,那么你可以嘗試如果你想要優雅地處理它,但通常你可以簡單地讓代碼彈出一個未處理的異常。 這會將球放回呼叫者的球場,以決定如何處理這種情況,或者意識到他們正在發送不良數據。
通常應該避免類型檢查,如果確實有必要,應該使用isinstance
而不是像您所做的那樣對類型進行相等檢查。 這具有對繼承情況更靈活的優點。
def aFuncion(input_):
if isinstance(input_, str):
print 'you gave a string-like input'
elif isinstance(input_, dict):
print 'you gave a dict-like input'
aFunction('test')
在python3中,您現在可以使用類型提示功能注釋。 有關該功能的更多詳細信息,請閱讀PEP 484 。
你有什么基本上工作,變量聲明只是一些麻煩。 這是一個工作的vesrion:
def aFunction(str = '', dicti = {}):
if len(str) > 0:
print 'you gave string as input'
if len(dicti) > 0:
print 'you gave a dict as input'
str = 'test'
dicti = dict([('test', 'test')])
aFunction(str = str)
aFunction(dicti = dicti)
aFunction(str = str, dicti = dicti)
aFunction(dicti = dicti, str = str)
提出:
you gave string as input
you gave a dict as input
you gave string as input
you gave a dict as input
you gave string as input
you gave a dict as input
您還可以將非特定參數作為列表和字典發送到函數(例如,參見什么是在Python中具有多個構造函數的干凈,pythonic方式? )。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.