Прежде чем предложить свое решение, я настоятельно предостерегаю от этого, если вы не знаете наверняка, нет вредоносного кода в a.txt.
Мое решение использует функцию execfile
, чтобы загрузить текстовый файл и возвращает первый объект (может быть переменная или функция):
def load_function(filename):
""" Assume that filename contains only 1 function """
global_var = dict()
execfile(filename, global_var)
del global_var['__builtins__']
return next(global_var.itervalues())
# Use it
myfunction = load_function('a.txt')
print myfunction()
Update
Чтобы быть немного более осторожным, модифицировать return, как показано ниже, так что она пропускает переменные (однако она не может пропустить объявление класса).
return next(f for f in global_var.itervalues() if callable(f))
Update 2
Спасибо johnsharpe за указание на то, что не существует в Python 3. нет execfile
Вот модифицированный раствор, который используют вместо exec
. На этот раз функция должна быть найдена в «локальной» области.
def load_function(filename):
""" Assume that filename contains only 1 function """
with open(filename) as f:
file_contents = f.read()
global_var = dict()
local_var = dict()
exec file_contents in global_var, local_var
return next(f for f in local_var.itervalues() if callable(f))
# Use it
myfunction = load_function('a.txt')
print myfunction()
Почему бы вам просто не переименовать его в '.py' и' import' это обычным способом? В любом случае, обратите внимание, что 'exec' ничего не возвращает, прочитайте его [документацию] (https://docs.python.org/3/library/functions.html#exec). – jonrsharpe
@jonrsharpe Сэр Это .txt файл. поэтому не может импортировать.и требование такое, что я не знаю имени функции txt-файла в файле python. –
... Python file * is * также просто текстовый файл, почему бы не 'os.rename' его? – jonrsharpe