2009-08-14 1 views
0

ワンライナーは、例えばPythonではDjango、そして私がそれを愛する間、私は簡潔さの少しを欠場する。ルビーは、私はオプションのパラメータで著作権の日付の範囲を返す私のRailsアプリで少しワンライナーを持って変換

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に触れてきましたので、年をされているので、私はそれを行うための簡単な方法があります賭けている:Pythonで同じメソッドは次のようになります何か案は?

EDIT:私は、リストやセットはやり過ぎのビットですけど、私は、コードを仮定して、次の出力は、2009年に実行されたい:

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

答えて

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]))) 
+0

ニース。早速のご返事ありがとうございます。 –

+0

リストの理解を忘れてしまった場合、私は " - " .join(map(str、sorted([start_year、datetime.now()。year]))))))に落とすことができました。 –

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))) 
+0

また、何らかの理由で私が将来の日付に合格することを決めた場合は、欠けているのは並べ替えだけです。それが私がリストとセットを使う唯一の理由です。質問を予想される出力で更新します。 –

+0

あなたは2つのアイテムだけを扱っているときにソートする必要はありません。注文の問題は今修正されました。 – tzot

5

一度だけ評価されているデフォルトのパラメータには注意してください。したがって、Webアプリケーションが12/31/09を超えて再起動せずに実行される場合、期待される出力は得られません。

試してみてください。

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])) 
関連する問題