- 不要那样做! ;)
但是,如果你仍然想,我建议你有一个中间类或函数处理这个给你:
伪代码:
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