2016-05-17 5 views
-2

У меня есть скрипт Python, который возвращает данные, печатая их, функция не используется.Преобразование скрипта Python 3 для функции

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

Конечно, я мог бы сделать это вручную, написав «def myapp():», выполнив все отступы и назову его в последней строке скрипта, но мне интересно, есть ли для этого инструмент?

+1

Шаг 1: Напишите 'def myapp():' в верхней части вашего скрипта | Шаг 2. Выделите весь свой скрипт и нажмите вкладку | Шаг 3: «возвращай» свой результат | У вас теперь есть самая уродливая функция, я надеюсь, что это сработает. Сомнение в том, что автоматический инструмент мог бы сделать намного лучше. – miradulo

+0

Возможный дубликат [Захват стандартный вывод из сценария в Python] (http://stackoverflow.com/questions/5136611/capture-stdout-from-a-script-in-python) –

+1

При проведении тест-Driven Development, один чтобы записывать функции с самого начала, чтобы тестовый код мог вызвать функцию и программно сравнить фактический результат с желаемым и ожидаемым результатом. Чтобы визуально увидеть результат, вы пишете, например, 'print (f (arg))'. Это отделяет * вычисление * результата от * отображения * результата. –

ответ

1

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

import sys    # if you want a system return code 
MY_CONSTANT = "whatever" # a symbolic constant 

def a_function(args): # replace with your useful stuff 
    pass 

# def b_function(args): # as many more defs as are useful 
    # can refer to/use both a_function (above) and c_function (below) 

# def c_function() 
    # etc 

def main(): 
    print("Script starting ...") 
    # parse arguments, if any parsing needed 
    # do stuff using the functions defined above 
    # print output, if needed 
    print("End of script") 
    sys.exit(0) # 0 is Linux success, or other value for $? on exit 

# "magic" that executes script_main only if invoked as a script 

if __name__ == "__main__": # are we being invoked directly from command line? 
    main()     # if so, run this file as a script. 

Почему? Этот файл (myfile.py) также можно использовать в качестве импорта, в приглашении интерпретатора или в другом файле/скрипте/модуле. Он будет определять константы и функции, но при импорте он фактически ничего не будет запускать, как показано ниже. Либо

import myfile 

так что вы можете обратиться к myfile.a_function, myfile.MY_CONSTANT и т.д. Или

from myfile import a_function 

, а затем вы можете вызвать a_function(args) без необходимости префикса. Вы часто увидите test или какое-то случайное имя: main() не является особенным.

Смежные вопросы