擅长:python、mysql、java
<p>我会用一些更简洁但仍然相当可读的东西,比如:</p>
<pre><code>geoms = ('line', 'point', 'polygon') # see EDIT
invalid = {'line', 'point', 'polygon', 'Polygon', 'Default Line', 'Default Point'}
for style in all_available_gs_styles:
if style.sld_title and str(style.sld_title) not in invalid:
if any(layer_geom == x and '{}Symbolizer'.format(x.capitalize()) in style.sld_body for x in geoms):
gs_styles.append((style.name, style.sld_title))
</code></pre>
<p>请注意,这些收益只是有条件的:</p>
<p>例如,首先检查相等性检查,因为它更快是正确的方法,但是它只在返回<code>False</code>的情况下才有帮助。你知道吗</p>
<p>你(和我)代码中的瓶颈是这些<strong><code>in</code></strong>检查(<code>if 'PolygonSymbolizer' in style.sld_body</code>),但是如果不知道你正在使用的数据,我就无能为力了。你知道吗</p>
<hr/>
<p><strong>编辑</p>
<p>使用<a href="https://plus.maths.org/content/eulers-polyhedron-formula" rel="nofollow noreferrer">Euler's formula for polyhedra</a>我们可以假设,对于每个多边形,线的数量(E)将大于顶点的数量(V),因此,<code>style.sld_body</code>中最常见的实体。我们可以利用这一点,通过像<code>geoms = ('line', 'point', 'polygon')</code>那样重新排列<code>geom</code>元组,使<code>any</code>短路</strong>更频繁。这当然不会产生重大影响,但这是我们所能做的最好的。你知道吗</p>