Python "спрятать" большой литерал в конце исходного кода / прямой ссылки? - PullRequest
0 голосов
/ 05 мая 2018

У меня есть этот исходный файл, настроенный для запуска тестов, если он запускается как __main__.

if __name__ == '__main__': 
    import sys

    expected_output = '''
         (60-line literal that represents the correct output)'''

    [run the tests collecting output in a variable named output]

    [compare output to expected_output]

Я хотел бы поместить этот огромный литерал внизу файла, но я не могу придумать, как создать прямую ссылку на него.

Мне просто не повезло?

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Вы должны назначить данные, прежде чем сможете их использовать. Хитрость заключается в том, чтобы поместить то, что у вас есть в if __name__==__main__, в функцию в верхней части кода. Затем вы можете поместить весь хороший код в эту функцию, добавить большой шарик уродства и поместить очень простой if внизу. К тому времени, когда вызывается main(), переменная уже назначена, и все готово.

import sys # aren't saving anything by putting it in the `if`

def main():
    [run the tests collecting output in a variable named output]
    [compare output to expected_output]

expected_output = '''
    (60-line literal that represents the correct output)'''

if __name__ == '__main__': 
    main()

@ tdelaney Вот небольшое украшение по вашему предложению.

def main(expected_output):
    [run the tests collecting output in a variable named output]
    [compare output to expected_output]


if __name__ == '__main__': 
    main(
'''
(60-line literal that represents the correct output)
'''
)
0 голосов
/ 05 мая 2018

Да, в python все должно быть определено перед использованием. Я бы порекомендовал поместить литерал в другой файл.

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

with open(__file__) as f: expected_output = f.read().rsplit("'''")[-2]

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

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