>>> compile("""
def some_function(x):
return x+2
some_function""",'compiled function','single')
Traceback (most recent call last):
File "<pyshell#3>", line 4, in <module>
some_function""",'compiled function','single')
File "compiled function", line 4
some_function
^
SyntaxError: unexpected EOF while parsing
0
A
ответ
2
Если вы хотите скомпилировать мульти-строку оператора с compile
а, single
должен быть exec
. Кроме того, после компиляции кода вы должны выполнить его и захватить глобальные переменные, чтобы получить доступ к созданной функции:
def anonymous(code):
# To fix the indentation
fixed_code = '\n'.join(line[4:] for line in code.splitlines())
_globals = {}
exec(compile(fixed_code, '<string>', 'exec'), _globals)
if 'f' not in _globals:
raise ValueError('You must name your function "f"')
return _globals['f']
anonymous('''
def f(x):
return x + 2
''')(12)
1
Вопрос не очень ясен, но является ли это примером, который вы хотите?
>>> c=compile('''\
... def some_function(x):
... return x+2
... print(some_function(5))
... ''','<string>','exec')
>>> exec(c)
7
>>> c=compile('7+2','<string>','eval')
>>> eval(c)
9
Смежные вопросы
- 1. Как я могу назвать анонимную функцию без использования Eval?
- 2. Использование exec и eval в Python
- 3. Одновременный eval и exec
- 4. Как идентифицировать анонимную функцию
- 5. Как запустить анонимную функцию
- 6. Как сбросить анонимную функцию
- 7. Альтернативы exec/eval?
- 8. Suhosin и отключить функцию eval
- 9. передать анонимную функцию как параметр
- 10. Как инициализировать эту анонимную функцию?
- 11. Как переместить анонимную функцию из
- 12. Как определить анонимную рекурсивную функцию?
- 13. JS Как контролировать анонимную функцию
- 14. jQuery, как удалить анонимную функцию
- 15. Пропустить встретить анонимную функцию
- 16. Перевести анонимную функцию
- 17. Передайте анонимную функцию onPanResponderMove
- 18. Отменить анонимную функцию
- 19. Перезаписать анонимную функцию struct
- 20. Преобразование в анонимную функцию
- 21. Javascript предотвращает анонимную функцию?
- 22. Написать лямбда или анонимную функцию, которая принимает выходной параметр
- 23. Как создать «пустую» анонимную функцию в MATLAB?
- 24. Как вызвать анонимную функцию в C#?
- 25. Возможно ли написать анонимную функцию квадратизации в CoffeeScript?
- 26. Как отслеживать анонимную функцию с помощью Jasmine
- 27. Зачем следует избегать exec() и eval()?
- 28. tcl: eval и exec confusing point
- 29. Python: exec() блок кода и eval() последняя строка
- 30. Как написать анонимную версию этого класса?
Это не код Python 3. – ThePiercingPrince
@LinuxDistance: просто превратите 'exec' в вызов функции, и он будет работать. Python 3 и Python 2 не такие разные. – Blender