Ruby到Python的一行代码转换
我在我的Rails应用里有一行简单的代码,可以返回一系列的版权日期,还可以加一个可选的参数,比如:
def copyright_dates(start_year = Date.today().year)
[start_year, Date.today().year].sort.uniq.join(" - ")
end
我正在把这个应用转到Django上,虽然我很喜欢Django,但我还是有点怀念Rails的简洁。用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'
3 个回答
2
我觉得列表和集合用起来有点过于复杂了。
那这样怎么样:
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)))
5
注意,默认参数只会被计算一次。所以如果你的网页应用在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]))
5
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])))
当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。