接受timedeltas或秒数会更好吗?

时间:2014-07-25 19:48:00

标签: python timedelta

我参与了一个开源项目,在那里,我查询最近更新的对象,所以我有一个接受max_age对象的函数。审核我的代码的人稍微倾向于在几秒钟内传递时间。虽然这不是一个大问题,但我认为这对我来说是一个学习机会。这是我们的对话。对于某些上下文,我们开始讨论参数的名称。

代码审核员:

  

max_age很好我觉得,我误读了。我认为max_age_timedelta是   也好(更明确)。更多地考虑它,是否有好处   不使用秒的原因?如同,传入一个整数?在那儿   显着的速度问题?

我:

  

不,只是易用性问题

代码审核员:

  

我温和地赞成在尽可能简单的函数之间传递对象。

我:

  

我根据日期查询,timedeltas使日期数学更容易。

代码审核员:

  

在内部创建timedelta是非常棘手的,输入的秒数是多少?   或者你在很多地方使用timedelta,每次都这样做会很乏味吗?   (nb:'内部'表示'执行查询功能的内部')

我:

  

它并不那么难,我当然可以在内部构建一个timedelta。   但是timedelta对象带有一段时间的语义。   整数和其他基本数据类型通过参数和变量名来获取它们的语义。

代码审核员:

  是的,我明白了。但是,在Python中,东西是无类型的,所以我们所拥有的主要信号方法是变量名。   即通过查看代码来判断对象的类型并不容易,就像在C ++中一样。

在这种情况下你会做什么?

1 个答案:

答案 0 :(得分:2)

  1. 虽然审稿人提出了一个有效的观点,即在Python中你无法通过查看对象的名称来判断它是什么类型,但我不认为这个论点适用于这种特定情况 - 因为这将是无论你是否传递timedelta或int。无论哪种方式,你都无法告诉它的类型。所以我会忽略这个论点。
  2. 如果您已经有timedelta,为什么要在各个地方进行转换。这是不必要的开销。
  3. 一致性:如果其余代码正在传递整数并转换为timedeltas,那么我会坚持使用当前的约定。如果代码中没有这样的先例,那么我会通过timedeltas。保持一致非常重要,因为看这个代码库的其他程序员有一定的期望。最好不要惹恼他们!
  4. 很好地评论您的代码。使用docstrings列出参数的类型。
  5. 本质上,如果使用int的代码中没有先例,我发现使用timedelta没有问题。