2016-04-18 14 views
0

これは私が書いたコードスニペットで、if条件ラダーのためにPythonicではないと考えています。このコードをもっとpythonicに最適化するにはどうすればよいですか?

このコードは、バックエンド処理のために使用されているカスタムクラスのものであり、

def _get_item(self, **kwargs): 
    """ returns an object if object exists else None""" 
    return self.model.objects.get_object_or_none(**kwargs) 


def get_object(self, info=None): 
    """ gets an object with given info """ 
    if info: 
     self._validate_info(info=info) 
     name = self._info.get('name', '') 
     slug = self._info.get('slug', '') 
     if slug: 
      obj = self._get_item(slug=slug) 
     elif name: 
      obj = self._get_item(name=name) 
     else: 
      obj = self._get_item(name=name, slug=slug) 
     if obj: 
      return obj 

は、ここで私はget_object()方法を最適化する必要があります。 ._validate_info()は、基本的にself._infoに必要な値をチェックして格納し、後で.get()メソッドで取得した辞書であるinfoを検証します。

どのように私はこのコードをPythonicと少なく混乱させるのですか?もう少し説明するために

def get_object(self, info=None): 
    self._validate_info(info) 
    return self._get_item(**self._info) 

self._infoのみnameslugデータが含まれ、あなたのような何かを書くことができると仮定すると

+1

[コードレビュー](http://codereview.stackexchange.com)に関するより良い質問。 (1)関数が '' if info''を上に使用する場合、 '' info''を '' None''にすることは可能ですか? (2)Pythonでは、 'infoがNoneでないならば:' 'if info:'ではありません。 (3) 'スラグとエリフ名が奇妙に見えたら'; 'self._info'には1つだけ存在しますか? (4) 'obj'を返すだけで、' if obj'は現在重複しています。 – ChrisP

+0

私はあなたに[this](http://www.linuxtopia.org/online_books/programming_books/python_programming/python_ch15s09.html)をチェックすることを勧めます。 – MikeVelazco

+2

これがCode Reviewに掲載されていれば、そのコードが何であるかが尋ねられます実際には、言い換えれば、文脈で行う。 – Phrancis

答えて

2

if obj: 
    return obj 
else: 
    return None 

if obj: 
    return obj 
# end of function 

は同等です

それはちょうどdoinと同じですg return objをテストなしで使用します(objNoneの場合は偽であると仮定します)。

関連する問題