2015-09-08 14 views
10

は、私がこれを行うための最善の方法が何であるかを把握しようとしている:これは条件式の有効な使用ですか?

resource['contents'][media_type] = [] 
resource['contents'][media_type].append(row[0].toPython()) if row[0] is not None else None 
resource['contents'][media_type].append(row[2].toPython()) if row[2] is not None else None 

私はコードは非常に簡単だと思います。行に値がある場合は、それらをリストに追加します。このアプローチはOKと考えられていますか?他にも良い方法がありますか?​​メソッドは、含まれているオブジェクトの文字列の説明を返します。

+8

いいえ、それは問題ではありません。副作用のために三項を使用することは、コードを読みにくくすること(そしてあなたに非常に長い行を与えること)を行う、本当に奇妙なアプローチです。 – jonrsharpe

+0

値が利用可能である場合に値を使用できる場合に追加したい – The6thSense

+0

@VigneshKalai利用できない場合は何もなし単純に何も追加しない – Giannis

答えて

16

副作用のために「3値」conditional expressionx if C else y)を使用することはまったくPythonicではありません。ここで私はそれを行うだろう方法は次のとおりです。

resource['contents'][media_type] = [] 
for index in (0, 2): 
    item = row[i] 
    if item is not None: 
     resource['contents'][media_type].append(item.toPython()) 

または冗長性を減らすために、リストの内包表記を使用して:

resource['contents'][media_type] = [row[i].toPython() for i in (0, 2) 
            if row[i] is not None] 

これらのアプローチは、はるかに読みやすいですし、重複を減らします。

+0

常にリストの理解を忘れてしまいます。ありがとうございます – Giannis

+0

また、私は 'is not'を含めることを提案していますか? groovyから来て、私は通常それを省略します。 – Giannis

+1

@Giannisはい、そうです。 2行目の箇条書きを参照してください:https://www.python.org/dev/peps/pep-0008/#programming-recommendations – jonrsharpe

10

いいえ、条件式を有効に使用することはできません。あなたのコードを読もうとする人は混乱します。

ifステートメントを使用してください。

lst = resource['contents'][media_type] = [] 
if row[0] is not None: lst.append(row[0].toPython()) 
if row[2] is not None: lst.append(row[2].toPython()) 

が、地元の参考のために、より良い名前を使う(contents多分?)、またはリストの内包表記を使用します:あなたは、リストへの別の参照を作成することによって、いくつかのスペースを節約することができ

resource['contents'][media_type] = [ 
    col.toPython() for col in (row[0], row[2]) if col is not None] 
2

Iドンそれを行うのが良い習慣と考えられるとは思わない。あなたが代わりに行うことができますすることです:

resource['contents'][media_type] = [] 

for irow in [0, 2]: 
    if row[irow] is not None: 
     resource['contents'][media_type].append(row[irow].toPython()) 

これは、あなたも(range(5)でirowのための)範囲を使用して、またはあなたが直接(for row in rows:)にアクセスできるかどうかの行を使用しての柔軟性を可能にします。

+0

これは2つの既存の回答にどのように追加されますか? – jonrsharpe

+0

私は何かの反応が出る前に投稿を開いていました。当時、OPの下には2つのコメントしかありませんでした。あなたの答えは正しいと思います。 –

+0

あなたはどのブラウザを使用していますか?比較的近代的であれば、回答が追加または編集されたときにバナーが表示されます。 – jonrsharpe

関連する問題