<p>我有两个相似的代码需要解析,但我不确定最适合python的方法来完成这一点。在</p>
<p>“我想有两个相似的代码”</p>
<pre><code>secret_code_1 = 'asdf|qwer-sdfg-wert$$otherthing'
secret_code_2 = 'qwersdfg-qw|er$$otherthing'
</code></pre>
<p>这两个代码都以<code>$$otherthing</code>结尾,并包含许多由<code>-</code>分隔的值</p>
<p>起初,我考虑使用<code>functools.wrap</code>将一些常见逻辑与特定于每种代码类型的逻辑分开,如下所示:</p>
^{pr2}$
<p>然而,这样做会让您混淆到底应该传递给<code>parse_code_*</code>函数的参数,即</p>
<pre><code>parse_code_1b(secret_code_1)
parse_code_2b(secret_code_2)
</code></pre>
<p>为了使函数的形式参数更易于推理,我将逻辑改为如下:</p>
<pre><code>def _parse_secret(parse_func, code):
_code = code.split('$$')[0]
return parse_func(code, *_code.split('-'))
def _parse_code_1(code, a, b, c):
"""
a, b, and c are descriptive parameters that explain
the different components in the secret code
returns a tuple of the decoded parts
"""
a = a.split('|')[0]
return (a,b,c)
def _parse_code_2(code, a, b):
"""
a and b are descriptive parameters that explain
the different components in the secret code
returns a tuple of the decoded parts
"""
b = b.split('|')[1]
return (a,b)
def parse_code_1(code):
return _parse_secret(_parse_code_1, code)
def parse_code_2(code):
return _parse_secret(_parse_code_2, code)
</code></pre>
<p>现在,更容易对传递给函数的内容进行推理:</p>
<pre><code>parse_code_1(secret_code_1)
parse_code_2(secret_code_2)
</code></pre>
<p>然而,这段代码明显更加冗长。在</p>
<p>有更好的方法吗?在这里,类的面向对象方法更有意义吗?在</p>
<p><a href="https://repl.it/Exqh/7" rel="noreferrer">repl.it example</a></p>