【发布时间】:2017-09-08 06:04:56
【问题描述】:
目前我专注于编写代码的 Pythonic 方式,我遇到了两种情况,我想知道什么是最好的。
首先是方法重载的情况,这在python中是没有的。我将如何最好地解决我有一个从数据库中获取数据的函数的情况,但是根据参数是整数还是整数列表,查询会有所不同。示例:
def getData(ids):
if type(ids) == int:
# query the database in an efficient manner for a single ID
elif type(ids) is list:
# query the database in a different manner efficiently for multiple ID's
# also return the data differently
我是在一个函数中完成所有工作,还是使用从上述函数调用的不同函数来完成工作?或者我是否只需要根据我是否有 ID 列表或只有一个 ID 显式调用不同的函数?你认为什么是最好的?
【问题讨论】:
-
避免“你更喜欢哪个”的问题,因为这些问题是基于意见的,并且通常是封闭的。使问题尽可能客观。
-
就个人而言,对于您的第一个问题,我认为让每个“分支”都有自己的功能更有意义。有一个 getByID 和 getByMultipleID 函数。然后,如果你想平滑它的使用,有一个 getData 函数来决定使用哪个。将决策逻辑与“获取”逻辑分开应该会使代码更简洁。
-
我提名这个问题重新打开,因为它已经被编辑了。但在这种情况下,它应该是“如何将整数或列表/可迭代”传递给同一个函数并检测 args 的副本。不过,约翰的回答很适合我。
-
如果返回值也不同(即第一种情况是单个列表,第二种情况是列表列表或列表的字典),那么它实际上应该是两个不同的函数。否则,它确实是“如何传递整数或列表/可迭代”副本。
-
stackoverflow.com/a/24602374/5320906 是使用
functools.singledispatch和实例方法的示例,如果您使用的是 python 3.4 或更高版本。
标签: python