Python中的abc模块


前言

《抽象基类(ABC)》中,基于C++讲述抽象基类。尽管Python设计上以鸭子类型为主,但仍有抽象基类(ABC)的一席之地,它被封装在了abc模块中供程序员使用。

abc模块有以下两个主要功能:

  • 某种情况下,判定某个对象的类型,如:isinstance(a, Sized)
  • 强制子类必须实现某些方法,即ABC类的派生类


抽象基类(ABC)


前言

我对抽象基类(Abstract Base Class,ABC)的理解在两个点上。第一点是抽象,即高度抽象;第二点是基类,对抽象基类来说,它的存在只是为了作为基类(区别于具体类),不可以被实例化

高度抽象一词听起来本身就很“抽象”,不妨让我用“总结”这个词进行通俗解释。比方这里有两类人,一类只是聋人,另一类只是盲人。现在我们需要对这两类人抽象,也就是需要总结两类人的相同点+不同点,然后付诸于代码。为方便起见,这里就列举三个行为:散步为相同点,看得见与看不见为不同点,听得见与听不见为不同点——这样一个过程,就是在“抽象”。(好吧,这般解释可能还是抽象)


时间的灰烬


【1】

十四五岁应该是我精力最旺盛的时候。

那时候能在冬日里的五点半起床,早饭自己做,然后去女友家楼下等她一起上学。走在路上,她问我喜欢她什么。有许多可以陈述的地方,最终被我以“因为你好看呀”笼统概括。女友似乎有些失望,悄无声息的终止这个话题。

后来很长一段时间里,我想不明白当时的回答怎么那么肤浅,听到的人大概率以为我是一个见色起意的人吧——虽然这样说也没错啦,不然我干么喜欢《搜神记》里陈紫函,喜欢《笑傲江湖》里陈乔恩,喜欢《一起同过窗》里徐晓璐……


Python传参陷阱


前言

简单的传参背后却藏匿着粗心就会完蛋的大坑。

默认传参

设计一个Python函数时,免不了用到默认传参;默认传参时,又免不了用到列表类型。如下面这样:

def add_elem_to_list(something, list_=[]):
    for i in something:
        list_.append(i)


动态规划-用编辑距离解释


前言

什么是编辑距离呢?

我们把“从字符串A到字符串B”的最少操作次数称作编辑距离。操作包含了:插入,删除,替换。比如字符串A = “abc”,字符串B = “abcd”,那么从A到B只需要增加一个字母“d”,所以编辑距离为1;同样的,从B到A只需要删除“d”,所以编辑距离也为1。

状态转移

将需要求解的问题,转移成子问题的过程,叫做状态转移。刻画状态转移的表达式称为状态转移方程式