繁体   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