<p>在Python中,整数类型是<code>int</code>,而不是字符串<code>"int"</code>。你知道吗</p>
<p>删除引号。你知道吗</p>
<p><code>tuple</code>和<code>list</code>也是如此。你知道吗</p>
<p>这是一个容易犯的错误,因为像JavaScript和Lua这样的其他语言使用字符串来表示类型。但是在Python中(就像在Ruby中一样),类型是实际的对象,由标识符引用。你知道吗</p>
<p><strong>肥皂盒</p>
<p>需要考虑的是:我看到您正在尝试创建一个函数,用户可以传递三个整数、一个元组或一个列表。你试图给你的呼叫者一些灵活性,这是值得称赞的,但你最终得到的是</p>
<ol>
<li>对参数进行类型检查,这不是超级Pythonic,并且</li>
<li>对列表或元组使用名为<code>r</code>的参数!你知道吗</li>
</ol>
<p>第二部分意味着有人可以打电话</p>
<p>rgbtohex(r=[21128123])</p>
<p>这有点奇怪。你知道吗</p>
<p>我要做的是把你的职能定义为</p>
<pre><code>def rgbtohex(r = 0, g = 0, b = 0):
...
</code></pre>
<p>如果您的用户有一个列表或元组,他们将知道如何解包并按以下方式调用:</p>
<pre><code>my_color = [21,128,123]
rgbtohex(*myColor)
</code></pre>
<p>我是这样做的:</p>
<pre><code>def rgbtohex(r=0, g=0, b=0):
if not all(c in range(256) for c in (r, g, b)):
raise ValueError('Components must be in range 0...255')
return '#{:02x}{:02x}{:02x}'.format(r, g, b)
assert(rgbtohex() == '#000000')
assert(rgbtohex(9, 20, 255) == '#0914ff')
assert(rgbtohex(9, b=20, g=192) == '#09c014')
assert(rgbtohex(*[11, 0, 0]) == '#0b0000')
// Negative tests left as an exercise for the reader ;-)
</code></pre>