2013-04-13 3 views
1

Я хочу распечатать файл, используя print Я импортирую из __future___. У меня есть следующие как импорт:Изменение определения существующей функции

from __future__ import print_function 

С этого момента, я могу напечатать с помощью:

print("stuff", file=my_handle) 

Однако, у меня есть много звонков на print в функции, поэтому я хотел бы быть в состоянии для использования функции, где аргумент ключевого слова привязан к my_handle. Таким образом, я использую частичное применение:

printfile = partial(print, file=my_handle) 
printfile("stuff") 
printfile("more stuff") 

Это то, что я намеревался. Однако можно ли каким-либо образом изменить определение print, частично применив аргумент ключевого слова? То, что я попытался было:

print = partial(print, file=my_handle) 

однако я получил ошибку говоря:

UnboundLocalError: local variable 'print' referenced before assignment 

Есть ли способ использовать print без упоминания моего файла каждый раз?

+1

Как насчет 'print = printfile'? Кажется, работает для меня. –

+0

Это не работает для меня. Если я это сделаю, я все равно получаю ту же ошибку, которая показывает мне строку 'printfile = ...', говоря, что печать не связана. – loudandclear

+0

Соответствует ли это: http://stackoverflow.com/questions/550470/overload-print-python? – fsw

ответ

0

print = partial(print, file=my_handle)

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

Чтобы исправить это вам нужно использовать другое имя:

fprint = partial(print, file=my_handle).

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