马丁·彼得斯(Martijn Pieters)回答。谢谢你。
这是因为语句vs表达式。并且由于.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中,结果都是相同的。
像所有作业一样,+=
是一个声明。您永远不能在表达式中放入语句。首先+=
评估右边的表达式(之后的所有内容),然后将其结果用于扩充分配。
您可以执行以下操作:
RNA_seq += 'U' if base == 'T' else base
现在,表达式根据的值解析为'U'
或。base
base
如果可行'U' if base == 'T' else RNA_seq.join(base)
,则意味着将RNA_seq.join()
返回一个新值,并且不会RNA_seq
就地发生突变。RNA_seq.join('U') if base == 'T' else RNA_seq.join(base)
然后还会返回一个新值,并保持原始值RNA_seq
不变,并且您没有将其分配回RNA_seq
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句