优雅使用函数,使其顺序恰当,搭配合理

函数的使用涉及很多逻辑合理性的内容,优秀的代码,逻辑清晰,代码简洁,函数调用恰当,内存占用小,cpu计算量小,方方面面涉及很多技巧和思维方式,需要程序员多读代码,多思考,勤试错。

这篇代码总觉得还有很多需要优化的地方,但总是逻辑不清,搞不明白修改哪里合适,怎么修改?先贴上来,以后有思路再做调整。

需求是这样的:从一个列有员工信息的文件中查找所需要的内容,给出这个文件格式如下

id name age   phone  post
1,ryan,28,135********,HR
2,...
3,...
import re
def show(i,inquire,li,dic):
    '''
    展示出用户要求展示的内容,即select与where之间的内容
    :param i:  循环文件得来的每一行
    :param inquire: 用户输入的语句
    :param li: 放入筛选结果的列表
    :param dic: 文件每行内容分割后放入的字典
    :return:
    '''
    lis = re.split('select|where.*|s|,', inquire)
    lis = list(filter(lambda x: x, lis)) #筛选出select与where之间的内容
    for k in lis:  #循环select与where之间的内容
        if k == '*':  #如果是*
            li.append(i)  #则把这一整行都放入列表
        else:
            li.append(dic[k])  #否则把字典中k的值放入列表

def filt(i,inquire,li,dic):
    '''
    筛选出符合条件的行,即符合where之后条件的内容
    :param i:  循环文件得来的每一行
    :param inquire: 用户输入的语句
    :param li: 放入筛选结果的列表
    :param dic: 文件每行内容分割后放入的字典
    :return:
    '''
    lis = re.split('where', inquire)
    if '>' in lis[1]:
        lis8 = lis[1].split('>')
        if lis8[0].strip() in dic and int(dic[lis8[0].strip()]) > int(lis8[1].strip()):
            show(i,inquire,li,dic)
    if '<' in lis[1]:
        lis8 = lis[1].split('<')
        if lis8[0].strip() in dic and int(dic[lis8[0].strip()]) < int(lis8[1].strip()):
            show(i, inquire, li, dic)
    elif '=' in lis[1]:
        lis8 = lis[1].split('=')
        if lis8[0].strip() in dic and dic[lis8[0].strip()] == lis8[1].strip():
            show(i, inquire, li, dic)
    elif 'like' in lis[0]:
        lis8 = lis[1].split('like')
        if lis8[1].strip() in dic and lis8[1].strip() in dic[lis8[0].strip()]:
            show(i, inquire, li, dic)

with open('staff_information',encoding='utf-8') as f:
    inquire = input('请输入语句:').strip()
    for i in f:
        li = []
        lis = i.strip().split(',')
        dic = {'name': lis[1], 'id': lis[0], 'age':lis[2], 'phone': lis[3], 'job': lis[4]}
        #把文件内容分割后(注意每分割必先除去前后空字符),然后把每个元素放入一个key是代表每列内容名字的字典中
        filt(i, inquire, li, dic)  #过滤文件内容并按用户要求仿佛列表中
        if li:print(li)

#用胡输入的查询语句如下:
#select name,age where age >22
#select * where phone like 135
#selext  name where  post=HR
员工信息表查询
原文地址:https://www.cnblogs.com/RyanJin/p/8290268.html