在我的函数中,我期望一个参数可以是tuple
或str
。作为Python的新手,我学到了“乞求原谅”比“请求许可”更好。因此,我没有检查参数的类型,而是这样做:
def f(a):
try: # to handle as tuple
e1, e2, e3 = a
...
except ValueError: # unpacking failed, so must be a string.
pass
# handle as string
然而,这并不总是有效的。如果a
是长度3
的str
呢?代码会将其视为元组。你知道吗
在这种情况下我该怎么办?诉诸类型检查?是不是少了点“Python”?请解释一下最'Python'的解决办法,为什么它是这样。你知道吗
显式优于隐式:定义两个函数,一个用于元组,另一个用于字符串。第二个最好的选择是,一个函数有三个参数,其中两个是可选的:
最好的可能性是检查参数的类型:
在Python中进行类型检查是非常好的,特别是当您希望为了函数重载而进行类型检查时。你知道吗
但是我建议你对字符串进行类型检查,而不是元组。虽然看起来总是传递一个元组,但是在很多情况下,传递一个不同的序列可能也很有意义,例如一个列表也很好。你知道吗
因此,您应该保持逻辑的原样,但首先检查字符串输入:
这样,在解包没有成功的情况下(例如,如果有人传递了一个2元素元组),就会出现一个适当的异常。在您的原始代码中,您必须以某种方式自行处理此问题(以避免运行认为它是字符串的代码)。你知道吗
Python有
isinstance()
函数是有原因的。有时检查参数的类型是正确的;在这里完全可以接受。你知道吗相关问题 更多 >
编程相关推荐