python重修之旅(二)

博文内容缺失

对于一个职场新人来说,我最不愿意看到的就是办公室政治。工程师不应该是这样的。

模块化的写作不适合我, 所以我决定把重修之旅写成游记形式。就酱。

six

python 2,3 兼容库,致力于实现文件兼容python 2.5 + 语法。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import six

def dispatch_types(value):
    # 在 python 3中 six.integar_types == int
    # 在 python 2中 six.integar_types == set(int, lang)
    if isinstance(value, six.integer_types):
        handle_integer(value)
    # 同理python2中经典类型和新式类型被合为 six.class_types
    elif isinstance(value, six.class_types):
        handle_class(value)
    elif isinstance(value, six.string_types):
        handle_string(value)

abc / abstract base class / 抽象基类

python3 内建库, 用来生成抽象类, python不存在真正的抽象基类,而是通过引入abc库实现这种 延迟实现的办法。相比之下,Java的interface 关键字就更为直白。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<!-- tab java -->
/* 文件名 : NameOfInterface.java */
import java.lang.*;
//引入包

public interface NameOfInterface
{
   //任何类型 final, static 字段
   //抽象方法
}
<!-- endtab -->
<!--tab python-->
# -*- coding: utf-8 -*-
from abc import ABC, ABCMeta, abstractmethod


class MyIterable(ABC):

    @abstractmethod
    def __iter__(self):
        while False:
            yield None

    def get_iterator(self):
        return self.__iter__()

# 使用abc的metaclass创建一个基础类。
class MyIterable2(metaclass=ABCMeta):

    @abstractmethod
    def __iter__(self):
        while False:
            yield None
        # ...

    def get_iterator(self):
        return self.__iter__()


@MyIterable.register
class Iter1:
    def __getitem__(self, index):
        ...

    def __len__(self):
        ...

    def get_iterator(self):
        return iter(self)


# 等效的接口实现方法
class Iter2(MyIterable2):
    def __getitem__(self, index):
        ...

    def __len__(self):
        ...

    def get_iterator(self):
        return iter(self)

iter1 = Iter1()
print(iter1.__dict__)

print(issubclass(Iter1, MyIterable))  # True
print(isinstance(Iter1, MyIterable))  # False
print(issubclass(Iter2, MyIterable2))  # True
print(isinstance(Iter2, MyIterable2))  # False

# for i in Iter1():
#     print(i)
<!-- endtab -->

matplotlib

wordcloud

jieba 分词库

读“multiprocess for human”的总结

乱七八糟

  • 逛 hub的时候看到一个traceback 插件,支持Cocoa,python web,ruby, react。 cursor:

shlex 库

subprocess 库

traceback 库

python-fire

python fire 是今年3月份 google 推出的新式CLI创建工具。与docopt有着完全不同的构建思路。

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus