擅长:python、mysql、java
<p>我想建议其他一些改变:</p>
<pre><code>def contains(self, point):
if not self.corners:
return False
def lines():
p0 = self.corners[-1]
for p1 in self.corners:
yield p0, p1
p0 = p1
for p1, p2 in lines():
... # perform actual checks here
</code></pre>
<p>注:</p>
<ul>
<li>一个有5个角的多边形也有5条边界线,而不是6条,你的循环是一次性的。</li>
<li>使用单独的生成器表达式可以清楚地表明您正在依次检查每一行。</li>
<li>已添加检查空行数。但是,如何处理零长度直线和具有单个角点的多边形仍然是一个未知数。</li>
<li>我还将考虑使lines()函数成为普通成员,而不是嵌套实用程序。</li>
<li>与许多嵌套的if结构不同,您还可以检查逆结构,然后<code>continue</code>或使用<code>and</code>。</li>
</ul>