擅长:python、mysql、java
<p>如果你像<code>protein(1, 6, 8)</code>那样调用它,你不是在传递元组:你传递了三个参数。由于您使用一个参数<code>array</code>定义了<code>protein</code>,因此会出现错误</p>
<p>通过使用<code>*args</code>,您可以使用任意参数。但是这个函数仍然不是很优雅,也不是很有效:它需要<em>O(n<sup>2</sup>)</em>来计算字符串</p>
<p>一种更具声明性和效率的方法可能是使用字典并执行查找,然后将这些查找结合在一起:</p>
<pre><code>translate = {1: 'NO+', 6: 'F-', 8: 'NO+'}
def protein(*array):
return ''.join(translate[x] for x in array)
</code></pre>
<p>如果要忽略传递的不在字典中的值(例如忽略<code>protein(1,7,6,8)</code>中的<code>7</code>),可以用<code>.get(x, '')</code>替换<code>[x]</code>:</p>
<pre><code>translate = {1: 'NO+', 6: 'F-', 8: 'NO+'}
def protein(*array):
return ''.join(translate.get(x, '') for x in array)
</code></pre>