擅长:python、mysql、java
<p>对于如何简化这一点,一个很好的提示是确定您有重复的代码。您还可以利用python支持一级函数的事实(即,它们可以作为值/参数传递到其他地方)</p>
<p><strong>编辑</strong>我刚看到你的变化。与一堆if语句相比,这种方法的一个好处是,如果您想添加更多解析器,它可以很容易地进行扩展</p>
<pre><code>def parse_address(address_str):
# if no address string provided, return None result
if not address_str:
return (None, None, None)
func_list = [geopy_parse, libpostal_parse, google_maps_parse]
for func in func_list:
res = func(address_str)
# The return statement immediately breaks out of the loop
# I.e. if the first func returns a non-None value, the others don't get executed
if res is not None:
return {
'nation': res['country'],
'state': res['state'],
'city': res['city'] or res['town'] or res['county']
}
else:
# Handles the situation where all of your parsers return None
return (None, None, None)
</code></pre>