首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化代码

优化代码
EN

Stack Overflow用户
提问于 2011-06-02 22:27:28
回答 3查看 244关注 0票数 2

我是python的新手。我希望所有的python专家都能给出一些建议,让下面的代码更有python风格,从而更有效率。这是一个简单的代码来找到两个单词之间的编辑距离。

附言。我希望在代码中的改进,而不是在逻辑或算法优化。

代码语言:javascript
复制
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的指针

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-02 23:12:08

Pythonic是:

  1. 写了很多单元测试。
  2. 不要重复发明轮子:在线搜索以前的问题解决方案。查看comments.
  3. Don't过早优化:分析您的代码,以确定这是否真的是一个瓶颈,如果它是一个瓶颈,请改进算法。
票数 3
EN

Stack Overflow用户

发布于 2011-06-02 22:43:31

我认为代码是pythonic式的,但正如评论中所说,选择通用的单字母变量词是一个非常糟糕的想法,这会使您的代码非常难以理解,这不是pythonic式的。

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

在变量名上尽量做到宽宏大量、描述性强。

参见example (在“什么是‘编码恐怖’的含义?”下)在本网站创建者博客中。

票数 1
EN

Stack Overflow用户

发布于 2011-06-02 22:51:15

您可能希望考虑将memoization层从类中分离出来,就像this decorator一样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6215885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档