Я ищу несколько идей, чтобы сделать следующую функцию Python максимально читабельной.
def pytest_generate_tests(metafunc):
if 'cvcorpus_docx' in metafunc.fixturenames and 'cvcorpus_expected' in metafunc.fixturenames:
actual_expected = cv_testcorpus_actual_expected()
metafunc.parametrize("cvcorpus_docx,cvcorpus_expected", actual_expected)
Я могу увидеть несколько способов, которые вы можете использовать в соответствии с руководством по стилю Python (PEP8 ). Я работаю с опытным разработчиком C #, который не имеет опыта работы с Python, и мы работаем над небольшим внутренним API. Я хочу, чтобы он мог легко и быстро читать код.
Могут ли Pythonistas среди нас оставить код, как указано выше, и поддерживать длину строки в 98 символов? Или используйте обратную косую черту, чтобы разбить if
между строками:
def pytest_generate_tests2a(metafunc):
if 'cvcorpus_docx' in metafunc.fixturenames and \
'cvcorpus_expected' in metafunc.fixturenames:
actual_expected = cv_testcorpus_actual_expected()
metafunc.parametrize("cvcorpus_docx,cvcorpus_expected", actual_expected)
Или вы бы заключили в скобки большое логическое выражение, чтобы вам не понадобился обратный слеш?
def pytest_generate_tests2b(metafunc):
if ('cvcorpus_docx' in metafunc.fixturenames and
'cvcorpus_expected' in metafunc.fixturenames):
actual_expected = cv_testcorpus_actual_expected()
metafunc.parametrize("cvcorpus_docx,cvcorpus_expected", actual_expected)
Do 2a
и 2b
сбиваетесь с толку из-за отступов?
или вы бы пошли на более функциональный подход и избегали длинной линии таким образом:
def pytest_generate_tests3(metafunc):
ae_pair = ('cvcorpus_docx', 'cvcorpus_expected')
if all(ae in metafunc.fixturenames for ae in ae_pair):
actual_expected = cv_testcorpus_actual_expected()
metafunc.parametrize(','.join(ae_pair), actual_expected)
В некоторых случаях это выглядит самым аккуратнымиз всего этого, но я не уверен, что он наиболее читабелен.
Я уже некоторое время смотрю на этот код и задаюсь вопросом, какой использовать (или есть ли у меня идея получше)Я действительно заинтересован в том, как вы расскажете об этой ситуации.