代码之家  ›  专栏  ›  技术社区  ›  Chris Doggett

Ruby到python的一行程序转换

  •  0
  • Chris Doggett  · 技术社区  · 16 年前

    def copyright_dates(start_year = Date.today().year)
        [start_year, Date.today().year].sort.uniq.join(" - ")
    end
    

    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'
    
    3 回复  |  直到 16 年前
        1
  •  5
  •   John Kugelman Michael Hodel    16 年前
    from datetime import datetime
    
    def copyright_dates(start_year = datetime.now().year):
        return " - ".join(str(y) for y in sorted(set([start_year, datetime.now().year])))
    
        2
  •  5
  •   ars    16 年前

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

    尝试:

    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]))
    
        3
  •  2
  •   tzot    16 年前

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

    这个怎么样:

    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)))
    
    推荐文章