[英]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.