s = r'abc123d, hello 3.1415926, this is my book'
print re.findall(r'-?[0-9]+(?:\.[0-9]*)?|-?\.[0-9]+',s)
Вам не нужно escape
дважды, когда вы используете raw mode
.
Выход: ['123', '3.1415926']
Также тип возврата будет списком strings
.Если вы хотите, чтобы возвращаемый тип, как integers
и floats
, использовал map
import re,ast
s = r'abc123d, hello 3.1415926, this is my book'
print map(ast.literal_eval,re.findall(r'-?[0-9]+(?:\.[0-9]*)?|-?\.[0-9]+',s))
Выход: [123, 3.1415926]
-g
для сборки релиза не является плохим автоматом, но если ваш код когда-либо генерирует дамп ядра, легче сделать голову или хвост дамп ядра, если файл программы содержит отладочную информацию.
-g
and -O
. It is harder to debug optimized code, but it gives you (often significant) performance benefits.Я бы предложил следующие режимы:
for debugger: -O0 -g -Wall
for development and internal release: -O2 -g -Wall
for release outside the company: -O2 -Wall
Обоснование:
-O2
-g
. Однако, если это слишком сложно, чтобы найти ошибку в таком режиме, вы можете скомпилировать для отладчика с помощью -O0
-g
. Хорошей идеей будет иметь -g
для кода в производственной среде, потому что, если что-то выйдет из строя, вы можете получить гораздо больше информации. Я бы взял совет Артема по поводу флагов и использовал -O
.
Мой главный совет - сделать режим по умолчанию «релиз». Ни один пользователь за пределами вашей компании не узнает о вашем make mode=release
соглашении, и 99,99% из них захотят его создать для выпуска.
Мне нравится, что вы включили -Wall
во всех режимах. Если вы хотите стать действительно педантичным ... -Wall -std=c++98 -pedantic -Wextra -Wconversion
- хорошее начало. -std = c ++ 98 может не понадобиться, если вы подключены к g ++, но если у вас есть какие-либо иллюзии переносимости, вы захотите этого.