当前函数的哪一个实现更像python?

2024-09-28 17:24:19 发布

您现在位置:Python中文网/ 问答频道 /正文

current_quarter函数的哪个实现更具python风格,为什么?你知道吗

第一个版本似乎更容易扩展。然而,这是一种你不会扩展的函数,因为四分之一的概念不会改变。你知道吗

在第二个版本中,更容易掌握力学。你知道吗

def current_quarter(input_date):
    months_baskets = [(1,2,3), (4,5,6), (7,8,9), (10,11,12)]
    quarters = (1,2,3,4)
    for idx, basket in enumerate(months_baskets):
        if input_date.month in basket:
            return quarters[idx]
            break

def current_quarter(input_date):
    if input_date.month in (1, 2, 3):
        return 1
    elif input_date.month in (4, 5, 6):
        return 2
    elif input_date.month in (7, 8, 9):
        return 3
    elif input_date.month in (10, 11, 12):
        return 4

Tags: 函数in版本inputdatereturndefcurrent
2条回答

两者都不是;用数学方法计算四分之一要简单得多:

def current_quarter(input_date):
    return (input_date.month - 1) // 3 + 1

快速演示:

>>> for month in range(1, 13):
...     quarter = (month - 1) // 3 + 1
...     print 'Month: {0:02d}, Quarter: {1:d}'.format(month, quarter)
... 
Month: 01, Quarter: 1
Month: 02, Quarter: 1
Month: 03, Quarter: 1
Month: 04, Quarter: 2
Month: 05, Quarter: 2
Month: 06, Quarter: 2
Month: 07, Quarter: 3
Month: 08, Quarter: 3
Month: 09, Quarter: 3
Month: 10, Quarter: 4
Month: 11, Quarter: 4
Month: 12, Quarter: 4

我不确定我是否得到了Martjin的建议,所以我冒昧地提出我的解决方案

>>> def current_quarter(input_date):
        return (input_date.month - 1) // 3 + 1
>>>
>>> from datetime import datetime
>>> [(m, current_quarter(datetime(2014, m, 1))) for m in range(1,13)]
[(1, 1), (2, 1), (3, 1), (4, 2), (5, 2), (6, 2), (7, 3), (8, 3), (9, 3), (10, 4), (11, 4), (12, 4)]

相关问题 更多 >