Ruby到python的一行程序转换

Ruby到python的一行程序转换,python,ruby-on-rails,ruby,django,Python,Ruby On Rails,Ruby,Django,我的Rails应用程序中有一个小的一行程序,它返回一系列版权日期,并带有一个可选参数,例如: def copyright_dates(start_year = Date.today().year) [start_year, Date.today().year].sort.uniq.join(" - ") end 我正在将这个应用程序转移到Django,虽然我喜欢它,但我错过了一点简洁性。Python中的相同方法如下所示: def copyright_dates(start_year =

我的Rails应用程序中有一个小的一行程序,它返回一系列版权日期,并带有一个可选参数,例如:

def copyright_dates(start_year = Date.today().year)
    [start_year, Date.today().year].sort.uniq.join(" - ")
end
我正在将这个应用程序转移到Django,虽然我喜欢它,但我错过了一点简洁性。Python中的相同方法如下所示:

def copyright_dates(start_year = datetime.datetime.today().year):
    years = list(set([start_year, datetime.datetime.today().year]))
    years.sort()
    return " - ".join(map(str, years))
我已经好几年没有接触Python了,所以我打赌有一种更简单的方法。有什么想法吗

编辑:我知道列表和集合有点过分,但假设代码在2009年运行,我需要以下输出:

copyright_dates()     # '2009'
copyright_dates(2007) # '2007 - 2009'
copyright_dates(2012) # '2009 - 2012'

列表和集合对我来说似乎有些过分

这个怎么样:

def copyright_dates(start=datetime.datetime.today().year):
    now = datetime.datetime.today().year
    return (start==now and str(now) or "%d - %d" % (min(start, now), max(start, now)))

注意一次计算的默认参数。因此,如果您的web应用程序在2009年12月31日运行而未重新启动,您将无法获得预期的输出

尝试:


美好的谢谢你的快速回复。我能够把它降到“-”。如果我没有理解列表,就加入(map(str,sorted(set([start\u year,datetime.now().year])))。还有一点很好,唯一缺少的是排序,如果出于某种原因我决定传递未来的日期。这是我使用列表和集合的唯一原因。我将用预期的输出更新问题。当您只处理两个项目时,不需要排序。我相信订单问题现在已经解决了。
def copyright_dates(start=datetime.datetime.today().year):
    now = datetime.datetime.today().year
    return (start==now and str(now) or "%d - %d" % (min(start, now), max(start, now)))
def copy(start=None):
    start, curr = start if start else datetime.today().year, datetime.today().year
    return str(start) if start == curr else '%d - %d' % tuple(sorted([start, curr]))