任何人都可以帮助我如何减少 python if 语句或任何其他替代解决方案?

古贾拉帕蒂拉朱

如果用户以 json 格式提供输入数据,我正在尝试将详细信息与数据库匹配。我们必须检查键,如果键存在于数据中(我们有),它应该做一些预处理并返回结果。我正在创建一个 API,它根据需要返回。

在这里我使用了多个 if 语句,但我想减少我的代码,有什么办法可以做到吗?

下面是我的代码供参考

@app.route('/api',methods=['GET'])
def aadhar_pan_users_check():
    data=request.get_json()
    aadhar=data.get('aadhar')
    pancard=data.get('pan')
    fname = data.get('firstName')
    lname = data.get('lastName')
    gender = data.get('gender')
    cust_type = data.get('cust_type')
    dob = data.get('dob')

   
    res=[]
    if aadhar!=None and pancard!=None:
        res.append((aadhar_check(aadhar), pan_check(pancard)))
        return str(res)
    elif pancard!=None:
        return str(pan_check(pancard))
    elif aadhar!=None:
        return str(aadhar_check(aadhar))
        # return jsonify({'aadhar': str(aadhar_check(aadhar))})
    elif fname!=None and lname!=None and gender!=None and cust_type!=None and dob!=None and aadhar!=None and pancard!=None:
        ret=[fname,lname,gender,cust_type,dob, aadhar, pancard]
        ret_ty=[formatting_data['fname'],formatting_data['lname'],formatting_data['gen'],formatting_data['client_type'],formatting_data['dob'],formatting_data['aadhar'],formatting_data['pan']]
        # print(ret_ty)
        return (preprocess_user_data(ret,ret_ty),aadhar_check(aadhar),pan_check(pancard))

    elif fname!=None and lname!=None and gender!=None and cust_type!=None:
        ret=[fname,lname,gender,cust_type]

        ret_ty=[formatting_data['fname'],formatting_data['lname'],formatting_data['gen'],formatting_data['client_type']]
        # print(ret_ty)
        return preprocess_user_data(ret,ret_ty),aadhar_check(aadhar)
    elif fname!=None and lname!=None and gender!=None:
        ret=[fname,lname,gender]
        ret_ty=[formatting_data['fname'],formatting_data['lname'],formatting_data['gen']]
        # print(ret_ty)
        return preprocess_user_data(ret,ret_ty)
    elif fname!=None and lname!=None and dob!=None:
        ret=[fname,lname,dob]
        print(1000*'3')
        ret_ty=[formatting_data['fname'],formatting_data['lname'],formatting_data['dob']]
        return preprocess_user_data(ret,ret_ty),aadhar_check(aadhar)
    elif fname!=None and lname!=None:
        ret=[fname,lname]
        ret_ty=[formatting_data['fname'],formatting_data['lname']]
        # print(ret_ty)
        return preprocess_user_data(ret,ret_ty)
    elif fname!=None and lname!=None and cust_type!=None and dob!=None:
        ret=[fname,lname,gender,cust_type,dob] 
        print(1000*'4')
        ret_ty=[formatting_data['fname'],formatting_data['lname'],formatting_data['client_type'],formatting_data['dob']]
        # print(ret_ty)
        return preprocess_user_data(ret,ret_ty),aadhar_check(aadhar)
    elif fname!=None and lname!=None and gender!=None and cust_type!=None:
        ret=[fname,lname,gender,cust_type]
        print(1000*'5')
        ret_ty=[formatting_data['fname'],formatting_data['lname'],formatting_data['gen'],formatting_data['client_type']]
        # print(ret_ty)
        return preprocess_user_data(ret,ret_ty),aadhar_check(aadhar)
    elif fname!=None:
        ret=[fname]
        print(type(fname))
        ret_ty=[formatting_data['fname']]
        # print(ret_ty)
        return preprocess_user_data(ret,ret_ty)
    else:
        return "Something wrong"

我有一些有助于预处理的功能。

爱丹

我不是 100% 清楚您的代码在做什么,但看起来您正在检查 aadhar 或 pancard 是否为 None - 如果它们为 None 则返回一些字符串表示 - 然后使用提供的任何额外信息。

使用它,您是否可以循环遍历“额外”数据,如果存在,将其附加到列表中,如果没有,则什么都不做?

然后正常返回 preprocess_function 。

像下面这样:

def aadhar_pan_users_check():
    data=request.get_json()
    aadhar=data.get('aadhar')
    pancard=data.get('pan')

    cust_data = {
        'fname' : data.get('firstName'),
        'lname' : data.get('lastName'),
        'gen' : data.get('gender'),
        'client_type' : data.get('cust_type'),
        'dob' : data.get('dob')
    }

    res = []
          
    ret = []
    ret_ty = []
    for key,value in cust_data.items():
        if value is not None:
            ret.append(value)
            ret_ty.append( formatting_data[key] )  

    if (pan is not None) and (aadhar is not None):
        check_result = 'YOUR_CODE_HERE' # your_code_here
    elif (pan is not None) and (aadhar is None):
        check_result = pan_check(pan)
    elif (pan is None) and (aadhar is not None):
        check_result = aadhar_check(aadhar)
    else:
        check_result = None

    if len(ret) == 0:
        preprocess_result = None
    else:
        preprocess_result = preprocess_user_data(ret,ret_ty)

    return preprocess_result, check_result

我认为该功能现在应该这样做:

如果两者都不是 None:您需要填写此内容,我不知道您期望什么行为。如果 pan 不是 None,则 aadhar 是 None:保留 'check_pan' 函数的结果。如果 aadhar 不是 None,则 pan 为 None:类似于 pan 如果两者都为 none:保留 None 作为检查结果。

如果有可用的客户数据,则保留预处理功能的结果。如果没有客户数据,则保留 None 作为预处理功能的结果。

然后:

返回预处理函数和 check_function 的结果。

if/else 比之前的函数更多,但我认为现在它们的目的已经很清楚了。

我没有任何样本数据来测试这会做什么,所以考虑这个“伪代码”。

您通常也应该比较is not None而不是`!= None,例如参见“ is None ”和“ ==None ”之间的区别是什么

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

减少函数执行 - 任何人都可以帮助我识别错误,因为我无法获得结果

任何人都可以帮助我解决 Hibernate 和 JSF 的这个缺点吗?

任何人都可以帮助我们解决这些 Xcode 错误吗?

我对执行流程感到震惊,任何人都可以帮助我

任何人都可以帮助我如何编写这行代码。我想在 jsx 中使用 map

任何人都可以通过 PySimpleGUI 帮助我编写代码完成此操作

任何人都可以帮助我在 intelliJ 中使用 GUI 页面

任何人都可以帮助我通过 CSS 对齐图标吗?

任何人都可以在以下情况下帮助我在DAC上

任何人都可以帮助我理解下面代码中的问题吗?

任何人都可以帮助我进行 webpack 配置吗?

任何人都可以在用户界面风格定位方面帮助我

任何人都可以帮助我进行以下 SQL 查询吗?

任何人都可以通过PIPELINED函数帮助我吗?

在viewpost.php遇到错误,任何人都可以帮助我

任何人都可以帮助我使用 keras 合并层

任何人都可以帮助我在 jQuery 中进行修剪吗?

任何人都可以帮助我在颤振中对齐布局吗?

任何人都可以帮助我解决尝试使用dll打开端口时遇到的此错误

任何人都可以在C ++中使用if语句和字符串来帮助我吗?

我希望 div 是透明的,但不是 div 内的按钮。任何人都可以帮助我吗?

Java并发-任何人都可以帮助我进行输出。为什么列表为空?

什么是 P2P 和网状网络?任何人都可以帮助我吗?

任何人都可以帮助我理解,redux 在现实生活中的实际用途是什么?

任何人都可以帮助我:android.database.sqlite.SQLiteException:接近“,”:语法错误(代码1):,

任何人都可以帮助我解码 SSIS 派生列中的条件(?)运算符

任何人都可以帮助我有关SQL查询的问题(在哪里)

任何人都可以帮助我使这个 java 运行没有错误吗?

任何人都可以帮助我在 php 的 foreach 循环中使用 json 数据吗?