When to type-check a function's arguments?
我在问一些情况,如果将错误类型的参数传递给函数,它可以:
例如,下面的函数期望参数
1 2 3 | def fruits(name): if name.startswith('O'): print('Is it Orange?') |
在其他情况下,如果在没有类型检查的情况下执行,函数可能会停止或导致系统损坏。每当有很多函数或带有大量参数的函数时,类型检查就很繁琐,并且使代码不可读。那么,是否有这样做的标准?关于"如何键入检查"-StackExchange上有很多示例,但我找不到适合这样做的任何地方。
另一个例子是:
1 2 3 4 5 | def fruits(names): with open('important_file.txt', 'r+') as fil: for name in names: if name in fil: # Edit the file |
如果名称是字符串,则其中的每个字符都将影响文件的编辑。如果它是任何其他iterable,它提供的每个元素都会影响编辑。这两种方法都可能产生不同的结果。
那么,我们什么时候应该输入检查参数,而不是?
我的答案是:这取决于输入来自哪里。
如果函数是内部调用的类方法或类似的方法,则可以假定输入是有效的,因为您编写了它!
例如
1 2 3 4 5 6 7 8 | def add(x,y): return x + y def multiply(a,b): product = 0 for i in range(a): product = add(product, b) return product |
在我的
如果必须读取文件、获取用户输入等,那么您可能需要先进行一些验证。
我几乎从不在python中进行类型检查。根据pythonic的哲学,我假设我和其他程序员都是成年人,能够阅读(或者至少是文档)并正确地使用代码。我假设我们在让代码破坏重要的东西之前先测试代码。毕竟,在大多数情况下,如果你做错了什么,你只会看到一个错误,而Python的错误消息在大多数情况下都是非常有用的。
我有时检查类型的唯一情况是希望函数根据参数的类型表现不同。但尽管有时我觉得必须这样做,但我不认为这是一个好的做法。
最常见的情况是,当我的函数迭代一个字符串列表时,我担心(或想要)我会意外地得到一个字符串传递给它——这不会一次抛出错误,因为不幸的是,字符串也是一个可重写的。