Попытка упростить еще одну лестницу if-else в python - PullRequest
0 голосов
/ 03 июля 2018

Я попытался реализовать ту же логику, что и " Упростить лестницу if - if - python ", которую я просил ранее, чтобы упростить лестницу if else. Но ради жизни я не могу упростить это.

for each_component in component_objects:
    if each_component['region_type'] == deploy_json['env_type'].upper() and each_component['component_type'] == 'pe' and each_component['name'] == 'PE1':
        env_data['PE1_HOSTNAME'] = each_component['hostname'].split('.')[0]

    elif each_component['region_type'] == deploy_json['env_type'].upper() and each_component['component_type'] == 'pe' and each_component['name'] == 'PE2':
        env_data['PE2_HOSTNAME'] = each_component['hostname'].split('.')[0]

    elif each_component['region_type'] == deploy_json['env_type'].upper() and each_component['component_type'] == 'versadirector' and each_component['name'] == 'VersaDirector':
        env_data['VD_HOSTNAME'] = each_component['hostname'].split('.')[0]

    elif each_component['region_type'] == deploy_json['env_type'].upper() and each_component['component_type'] == 'jump' and each_component['name'] == 'Jump':
        jump_ips = json.loads(each_component['ip_addr'])

    elif each_component['region_type'] == deploy_json['env_type'].upper() and each_component['component_type'] == 'versaanalytics' and each_component['name'] == 'VersaAnalytics1':
        analytics_1 = each_component['hostname'].split('.')[0]

    elif each_component['region_type'] == deploy_json['env_type'].upper() and each_component['component_type'] == 'versaanalytics' and each_component['name'] == 'VersaAnalytics2':
        analytics_2 = each_component['hostname'].split('.')[0]

    elif each_component['region_type'] == deploy_json['env_type'].upper() and each_component['component_type'] == 'versaanalytics' and each_component['name'] == 'VersaAnalytics3':
        analytics_3 = each_component['hostname'].split('.')[0]

    elif each_component['region_type'] == deploy_json['env_type'].upper() and each_component['component_type'] == 'versaanalytics' and each_component['name'] == 'VersaAnalytics4':
        analytics_4 = each_component['hostname'].split('.')[0]

Я пытаюсь создать словарь env_data и переменные analytics_X . Теперь причина этого запроса заключается в том, что этот фрагмент кода при запуске через инструмент качества кода выдает критические предупреждения и нуждается в дальнейшем упрощении для прохождения проверки качества кода. У кого-нибудь есть идеи? Помощь здесь

1 Ответ

0 голосов
/ 03 июля 2018

Вы повторяете много проверок. Не делай этого. Для упрощения просто вложите уникальные if s в повторяющуюся инструкцию if:

for each_component in component_objects:
    if each_component['region_type'] == deploy_json['env_type'].upper():

        if each_component['component_type'] == 'pe':
            if each_component['name'] == 'PE1':
                env_data['PE1_HOSTNAME'] = each_component['hostname'].split('.')[0]
            elif each_component['name'] == 'PE2':
                env_data['PE2_HOSTNAME'] = each_component['hostname'].split('.')[0]

        elif each_component['component_type'] == 'versadirector' and each_component['name'] == 'VersaDirector':
            env_data['VD_HOSTNAME'] = each_component['hostname'].split('.')[0]

        elif each_component['component_type'] == 'jump' and each_component['name'] == 'Jump':
            jump_ips = json.loads(each_component['ip_addr'])

        elif each_component['component_type'] == 'versaanalytics':
            if each_component['name'] == 'VersaAnalytics1':
                analytics_1 = each_component['hostname'].split('.')[0]
            elif each_component['name'] == 'VersaAnalytics2':
                analytics_2 = each_component['hostname'].split('.')[0]
            elif each_component['name'] == 'VersaAnalytics3':
                analytics_3 = each_component['hostname'].split('.')[0]
            elif each_component['name'] == 'VersaAnalytics4':
                analytics_4 = each_component['hostname'].split('.')[0]

Это почти настолько просто, насколько это возможно. Вы должны использовать функции, если хотите еще больше упростить, потому что на данный момент есть много повторяющихся задач. Все, что повторяется, может быть заменено функцией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...