重构典型案例

2018-08-08  本文已影响0人  唯此

2018-08-08

1.frm.unqiue()

for i in list(set(html_df['table_id'].values)):
for i in html_df['table_id'].unique()

2.正则表达式跨行搜索

        with open(py_file_path, 'r', encoding='utf-8') as f:
            file_codeline_list = f.readlines()
        for line in file_codeline_list: # todo: 可以简化
            if re.match(self.re_author, line):
                author = re.match(self.re_author, line).group(1)
                author = author.lstrip().rstrip()
                author = author.replace(self.DOUBLE_QUOTES, '').replace(self.SINGLE_QUOTES, '')
                return author
        return self.UNKNOW_AUTHOR
        re_author = r'\s*_author\s*=\s*"(\S+)"'
        assert isinstance(py_file_path, str)
        with open(py_file_path, 'r', encoding='utf-8') as f:
            all_text = f.read()
        res = re.search(re_author, all_text)
        if res:
            author = all_text[res.regs[1][0]: res.regs[1][1]]
            return author
        return self.UNKNOW_AUTHOR

3.迭代表达式

        with open(py_file_path, 'r', encoding='utf-8') as f:
            file_lines = f.readlines()
            striped_lines = []
        for line in file_lines:
            line = line.lstrip()  # 去除缩进
            if line != '':  # 跳过空白行
                striped_lines.append(line)
        return striped_lines
with open(py_file_path, 'r', encoding='utf-8') as f:
    file_lines = f.readlines()
striped_lines = [line.lstrip() for line in file_lines if line]

4.提取函数

事不过三,三则重构

        assert isinstance(author, str)
        assert isinstance(code_frm, pd.DataFrame)
        assert isinstance(title_num, str)
from helper import assert_isinstance # ylib里面提供易用的函数
assert_isinstance([author,code_frm,title_num ],[str, pd.DataFrame, str])

5.**Series传递函数参数

    def row_td_head(self, i, frm, td_head_list):
        upon_td_align = frm.loc[i, 'upon_td_align']
        upon_td_index = frm.loc[i, 'upon_td_index']
        row_align = frm.loc[i, 'row_align']
        col_index = frm.loc[i,'col_index']
        string = frm.loc[i, 'string']
        # 省略了N行代码
        return td_head

    def row_td_head(self, i, frm, td_head_list):
        def the_func(upon_td_align,upon_td_index,row_align,col_index,string):
            # 省略了N行代码
            return td_head
        return the_func(**frm.loc[i, ['upon_td_align','upon_td_index','row_align','col_index', 'string']])

cc利用1到5点改下代码.hj看下3到4.

上一篇下一篇

猜你喜欢

热点阅读