Я хочу поддерживать одну базу кода, где я могу динамически включать и отключать некоторые функции для другой версии сборки. Конечно, я могу сделать это с помощью флагов компилятора в C/C++, имея несколько конфигураций сборки. Но как я могу это сделать с Python? Есть ли эквивалентная технология в Python?Какова эквивалентная функция флагов компилятора C++ в Python?
ответ
В C, конечно, препроцессор используется для определения того, какие части программы включены или исключены. Существует жесткое и быстрое разграничение между препроцессором и основным программным кодом.
Нет препроцессора, и поэтому такого пиринга в Python не может показаться странным для программиста на C. Но только потому, что такого разграничения нет, это не означает, что вы не можете перенастроить свое приложение.
Python чрезвычайно динамичен - одна из приятных особенностей Python заключается в том, что приложение может даже быть переконфигурировано «на лету», читая файлы конфигурации, которые либо находятся в специализированном формате (некоторые из них поддерживаются в стандартной библиотеке) , или даже в Python.
Существуют расширенные способы перенастройки приложения, но наиболее простым, возможно, является файл конфигурации, который является чистым Python. Например, вы могли бы иметь myconfig.py
, который имеет такие заявления: сценарий конфигурации
use_widgets = True
use_cogs = False
Это Python может даже существовать, когда пользователь выполняет программу с; такое поведение легко поддерживается путем добавления текущего каталога в пути поиска модулей:
import sys
sys.path.insert(0, '.')
import myconfig
Как вы знаете, в C, #if
является более эффективным, чем if
, потому что результаты предварительно вычислены перед выполнением. Python не имеет #if
, но в отличие от C, if
операторы могут легко существовать вне какой-либо функции, так что вы можете заменить целые участки кода в зависимости от конфигурации:
if myconfig.use_widgets:
def myfunc(.....):
<definition that uses widgets>
else:
def myfunc(.....):
<non-widget definition>
Когда модуль импортируется, Python будет компилировать (если он еще не был предварительно скомпилирован в файл .pyc), а затем выполните тело модуля. Это выполнение свяжет первое определение модуля (для виджетов с использованием myfunc
) с идентификатором myfunc
в глобальных переменных модуля и немедленно отменит не-виджет myfunc
(не выполняя предложение else
).
Это немного менее эффективно при запуске, чем наличие одного myfunc
, но после запуска нет штрафа во время исполнения - второй myfunc исчезает и больше никогда не отображается, а первый myfunc оптимизирован для случая, когда у вас есть виджеты, это тот, который выполняется, когда другая часть программы вызывает myfunc
.
- 1. «эквивалентная функция» в Python
- 2. Python эквивалентная функция cvCalcEigenObjects
- 3. Измените порядок флагов компилятора
- 4. Что такое эквивалентная функция «nth_element» в Python?
- 5. Определение происхождения флагов компилятора
- 6. Список флагов компилятора Xcode
- 7. Объектно-C эквивалентная функция mysql_real_escape_string()
- 8. Функция C#, эквивалентная протоколу CCtalk
- 9. эквивалентная функция C, различные результаты
- 10. Какова цель-c, эквивалентная ByteArrayOutputStream Java?
- 11. Задание флагов компилятора для источников C
- 12. Функция ASP Filter -> эквивалентная функция C#
- 13. Функция индекса индекса Perl, эквивалентная в Python
- 14. эквивалентная функция «yield» excel в python?
- 15. Эквивалентная функция «датирования» (...) «MatLab» в Python?
- 16. Эквивалентная функция рубиновой нагрузки в python
- 17. Эквивалентная функция данных (datestring) Matlab в Python
- 18. Есть ли эквивалентная функция для strnset() для C в Python?
- 19. PHP imagettftext() эквивалентная функция в C++/Java/Python
- 20. Какова эквивалентная функция REPLACE (из Oracle) в Sybase
- 21. AJAX: Какова эквивалентная функция функции beforeSend в XMLHttpRequest
- 22. Определенная пользователем функция, эквивалентная strlen() в C
- 23. есть функция, эквивалентная php array_merge в C#
- 24. Что такое фиксированная эквивалентная функция в C#
- 25. Эквивалентная функция в Mono.cecil
- 26. Передача флагов компилятора через xcodebuild
- 27. Какова область предварительного компилятора в C++?
- 28. Эквивалентная функция% in% (из R) для python
- 29. Есть ли функция python strip, эквивалентная javascript?
- 30. Установка флагов компилятора с использованием swig и python
Python не поддерживает условную компиляцию. –
Есть ли какой-либо способ добиться того же в python? любые взломы с использованием аргументов командной строки или что-то еще? – Kaje
Какие функции компилятора C++ вы специально хотите в Python? – Galik