簡體   English   中英

如何為同一個功能使用不同的輸入類型?

[英]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')

但我希望在調用函數時能夠清楚區別

使用相同方法支持不同參數類型的想法稱為多個調度或多方法

為了得到一個很好的介紹,你可以閱讀這篇Guido Van Rossum 文章 ,看看PyPi,因為有一些多方法包可用。

這個想要“在調用函數時要明確區別”的目標並沒有與語言的設計理念相提並論。 谷歌“鴨子打字”了解更多相關信息。 接受的輸入應該通過函數的文檔字符串清楚,這就是你需要做的。

在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.

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