擅长:python、mysql、java
<p>您将绑定(请参见:<a href="http://en.wikipedia.org/wiki/Variable_shadowing" rel="nofollow">variable shadowing</a>)覆盖到<code>types</code><a href="https://docs.python.org/2/library/types.html" rel="nofollow">module</a>,如下所示:</p>
<pre><code>types = [re.sub('[^a-zA-Z]','',x.split()[1]) for x in schema]
</code></pre>
<p>之后,<code>types</code>不再指向模块,而是指向一个列表。在所有作业中使用另一个名称:</p>
^{pr2}$
<p><strong>更新</strong></p>
<p>我认为你设计了太多的解决方案,除了第一行,这不适合使用正则表达式。一个简单的<code>if-elif-else</code>就可以了:</p>
<pre><code>def transform(typestr):
if typestr in ('varchar', 'text'):
return types.StringType
elif typestr in ('int', 'bigint', 'decimal'):
return types.IntType
else:
return None
my_types = [re.sub(r'[^a-zA-Z]', '', x.split()[1]) for x in schema]
[transform(x) for x in my_types]
=> [<type 'str'>, <type 'int'>, <type 'str'>]
</code></pre>