このコードを書く良い方法はありますか?私はそれがとても簡単だと知っていますが、私が書いた方法はとても反復的です。Python:joinを使ってif-thenブロックを書くより良い方法は?
私は一行の天才コードを探している必要はありません。
ありがとうございます!
def __unicode__(self):
location = []
if self.room != None:
location.append(self.room)
if self.floor != None:
location.append(self.floor)
if self.building != None:
location.append(self.building)
location.append(self.property)
return ", ".join(location)
self.property
は常にself.room
、self.floor
、そしてself.building
のための真のされていない、設定されています。ちなみに、これはDjangoコードのmodels.py
の一部です。
サイドの質問:悪い考え変数名としてproperty
を使用していますか?私はproperty
が構文の下で強調表示されていることに気づいたが、私はそれを見て、それはPython reserved wordではない。ここで
は完全なクラスです:それは自動的にTrue
に評価された最初の式の値を返します
first = self.room or self.floor or self.building
if first:
location.append(first)
:
class Location(models.Model):
def __unicode__(self):
location = []
if self.room != None:
location.append(self.room)
if self.floor != None:
location.append(self.floor)
if self.building != None:
location.append(self.building)
location.append(self.property)
return ", ".join(location)
comments = models.TextField(blank = True)
room = models.CharField(max_length = 135, blank = True)
floor = models.CharField(max_length = 135, blank = True)
building = models.CharField(max_length = 135, blank = True)
property = models.ForeignKey(Property)
t_created = models.DateTimeField(auto_now_add = True)
t_modified = models.DateTimeField(auto_now = True)
またはlocation = filter(なし、オプション)[:1] –
もし彼が実際に最初のものだけを望んでいたら、それはうまくいくでしょう。また、彼は後でそれをリストにキャストする必要があります。 – jdi
もちろん、[:1]を取り除くことでそれらのすべてを得ることができます。タプルではなくリストを渡すと、リストが返されます。 –