我是python的新手。我希望所有的python专家都能给出一些建议,让下面的代码更有python风格,从而更有效率。这是一个简单的代码来找到两个单词之间的编辑距离。
附言。我希望在代码中的改进,而不是在逻辑或算法优化。
class test:
def __init__(self,a,b,I=1,D=1,R=1):
self.a = a
self.b = b
self.mem = dict()
self.la = len(a)
self.lb = len(b)
self.I = I
self.D = D
self.R = R
def diff(self,i=0,j=0):
T = self.diff
memo = self.mem
if j == self.lb: return self.D * i
if i == self.la: return self.D * j
if (i,j) in memo:
return memo[(i,j)]
if self.a[i] == self.b[j]:
memo[(i,j)] = T( i+1,j+1 )
return memo[ (i,j) ]
memo[(i,j)] = min(self.R + T(i+1,j+1) , self.D + T(i+1,j) , self.I + T(i,j+1) ,
self.D + T(i,j+1) , self.I + T(i+1,j) )
return memo[(i,j)]变量解释:
a、b是要找到其edit distance的两个字符串。I、D、R插入、删除和替换单个字母的费用。mem是用于记忆递归调用的字典。I和j分别是字符串a和b的指针
发布于 2011-06-02 23:12:08
Pythonic是:
发布于 2011-06-02 22:43:31
我认为代码是pythonic式的,但正如评论中所说,选择通用的单字母变量词是一个非常糟糕的想法,这会使您的代码非常难以理解,这不是pythonic式的。
这适用于每种编程语言,但在某些情况下,python和其他dynamically typed languages更是如此。
在变量名上尽量做到宽宏大量、描述性强。
参见example (在“什么是‘编码恐怖’的含义?”下)在本网站创建者博客中。
发布于 2011-06-02 22:51:15
您可能希望考虑将memoization层从类中分离出来,就像this decorator一样。
https://stackoverflow.com/questions/6215885
复制相似问题