Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 优化代码_Python - Fatal编程技术网

Python 优化代码

Python 优化代码,python,Python,我是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

我是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是要找到的两个字符串。 一、 D、R插入、删除和替换单个字母的成本。 mem是用于记忆递归调用的字典。
i和j分别是字符串a和b的指针

我认为代码非常类似于python,但正如在注释中所述,选择通用的单字母变量单词是一个非常糟糕的主意,并且会使代码非常难以理解,这不是python

这适用于每种编程语言,但在某些情况下,python和其他语言更是如此

对于变量名,尽量做到慷慨大方和描述性


参见下面的“编写恐怖代码”的含义是什么?在这个站点创建者博客中,

< P>你可能想考虑将你的类中的记忆层分解,沿着“./P> < P > > Pythonic将是:

编写大量的单元测试。 不要重新发明轮子:在线搜索以前的问题解决方案。见评论。 不要过早地优化:分析你的代码以确定这是否真的是正确的 瓶颈,如果是,则改进算法。 有意义的变量名 不要以大写字母开头局部变量名 在括号Ti+1,j+1内使用普通空格,而不是Ti+1,j+1 不要在元组周围使用假括号:memo[i,j]而不是memo[i,j] 不要过早地优化:自我扩散+1,j+1而不是Ti+1,j+1
一切正常吗?也许是codereview.SE?步骤1:给变量起一个有意义的名字。或者至少记录变量的含义。超过一个字母的变量名将有助于了解您要做的事情……不过,我建议您做的第一件事是,选择更好的变量名,使用a、b、c来表示所有内容,这会让其他人很难理解代码……您希望它更快,但你不想听算法的改进?那完全是错误的想法。