Моя компания очень строго придерживается пидокстиля. Я бегу к пределу строки, пытаясь изменить эти значения, вложенные в файл json.
Rem_Conf['RemediationConfigurations'][0]['Parameters']['AutomationAssumeRole']['StaticValue']['Values'][0] = rolearn
Rem_Conf['RemediationConfigurations'][0]['Parameters']['GranteeId']['StaticValue']['Values'][0] = canid
Rem_Conf['RemediationConfigurations'][0]['Parameters']['TargetBucket']['StaticValue']['Values'][0] = targetbucket
Как я могу сжать это, чтобы соответствовать пределу пидокстиля в 79 символов?
Всего 4 ответа
Одним из способов является замена встроенных ключей с именованными переменными
cfg='RemediationConfigurations'
params='Parameters'
role='AutomationAssumeRole'
sval='StaticValue'
val='Values'
guid='GranteeId'
tbuk='TargetBucket'
Rem_Conf[cfg][0][params][role][sval][val][0] = rolearn
Rem_Conf[cfg][0][params][guid][sval][val][0] = canid
Rem_Conf[cfg][0][params][tbuk][sval][val][0] = targetbucket
Здесь самая длинная строка - 60
символов, и это делает читателя очень понятным
Вы можете заключить строки в скобки, как показано ниже. Конечно, не стесняйтесь поиграть с форматированием. Это то, что выводит black
форматтер.
(
Rem_Conf["RemediationConfigurations"][0]["Parameters"]["AutomationAssumeRole"][
"StaticValue"
]["Values"][0]
) = rolearn
(
Rem_Conf["RemediationConfigurations"][0]["Parameters"]["GranteeId"]["StaticValue"][
"Values"
][0]
) = canid
(
Rem_Conf["RemediationConfigurations"][0]["Parameters"]["TargetBucket"][
"StaticValue"
]["Values"][0]
) = targetbucket
ИМХО, это был бы читаемый формат:
(Rem_Conf
["RemediationConfigurations"]
[0]
["Parameters"]
["AutomationAssumeRole"]
["StaticValue"]
["Values"]
[0]
) = rolearn
Вот что выводит форматер black
питона на ваш оригинальный код:
Rem_Conf["RemediationConfigurations"][0]["Parameters"]["AutomationAssumeRole"][
"StaticValue"
]["Values"][0] = rolearn
Rem_Conf["RemediationConfigurations"][0]["Parameters"]["GranteeId"]["StaticValue"][
"Values"
][0] = canid
Rem_Conf["RemediationConfigurations"][0]["Parameters"]["TargetBucket"]["StaticValue"][
"Values"
][0] = targetbucket
Другие ответы даже лучше, просто хотелось бы добавить, что по крайней мере вы можете использовать такие обратные слеши:
Rem_Conf['RemediationConfigurations'][0]['Parameters']
['AutomationAssumeRole']['StaticValue']['Values'][0] = rolearn
Rem_Conf['RemediationConfigurations'][0]['Parameters']
['GranteeId']['StaticValue']['Values'][0] = canid
Rem_Conf['RemediationConfigurations'][0]['Parameters']
['TargetBucket']['StaticValue']['Values'][0] = targetbucket
Документация Python гласит следующее:
2.1.5. Явное соединение строк
Две или более физических строки могут быть объединены в логические строки с помощью символов обратной косой черты (
) следующим образом: когда физическая строка заканчивается обратной косой чертой, которая не является частью строкового литерала или комментария, она объединяется со следующими, образуя одну логическую строку строка, удаляя обратную косую черту и следующий символ конца строки.
Я бы просто использовал промежуточное значение:
Parameters = Rem_Conf['RemediationConfigurations'][0]['Parameters']
Parameters['AutomationAssumeRole']['StaticValue']['Values'][0] = rolearn
Parameters['GranteeId']['StaticValue']['Values'][0] = canid
Parameters['TargetBucket']['StaticValue']['Values'][0] = targetbucket