0

Martijn Pieters による回答。ありがとうございました。
それは、ステートメント対表現だからです。また、 .join() は変更されない (純粋な関数である) ため、変数に割り当てる必要があります。

質問:
この奇妙さの理由は何ですか?

ゴール:

if base == 'T':
    RNA_seq += 'U'
else:
    RNA_seq += base

この次の方法が機能します。

# += in expression1 and .join() in expression2
RNA_seq += 'U' if base == 'T' else RNA_seq.join(base)
# Edit note: RNA_seq.join(base) works because it returns `base`
#       aka. RNA_seq += 'U' if base == 'T' else base

ただし、以下は機能しません。

# Using += on both expressions
RNA_seq += 'U' if base == 'T' else RNA_seq += base

また

# Using .join() for both expressions
RNA_seq.join('U') if base == 'T' else RNA_seq.join(base)

結果は、Python2 と Python3 の両方で同じです。

4

2 に答える 2

6

すべての代入と同様に+=ステートメントです。ステートメントを式に入れることはできません。右側の式 ( の後のすべて) が最初+=に評価され、その結果が増補代入に使用されます。

次のことができます。

RNA_seq += 'U' if base == 'T' else base

これで、式はの値に応じて'U'、 またはのいずれかに解決されます。basebase

機能した場合'U' if base == 'T' else RNA_seq.join(base)、それはRNA_seq.join()新しい値を返し、インプレースで変更されないことを意味しますRNA_seqRNA_seq.join('U') if base == 'T' else RNA_seq.join(base)その後、新しい値も返され、元の値は変更されずにバインドされたRNA_seqままになり、それを に戻さなかったRNA_seq.

于 2014-05-10T07:15:45.273 に答える