Замена Python NOOP

Часто мне нужно временно прокомментировать какой-то код, но бывают ситуации, подобные следующей, когда комментирование одной строки кода приведет к синтаксической ошибке.

if state == False:
    print "Here I'm not good do stuff"
else:
#    print "I am good here but stuff might be needed to implement"

Есть ли что-то, что может действовать как NOOP, чтобы сохранить правильный синтаксис?


person Eduard Florinescu    schedule 18.09.2012    source источник


Ответы (3)


Искомая операция pass. Итак, в вашем примере это будет выглядеть так:

if state == False:
    print "Here I'm not good do stuff"
else:
    pass
#    print "I am good here but stuff might be needed to implement"

Подробнее об этом можно прочитать здесь: http://docs.python.org/py3k/reference/simple_stmts.html#pass

person while    schedule 18.09.2012

В Python 3 ... является довольно хорошей заменой pass:

class X:
    ...

def x():
    ...

if x:
    ...

Я прочитал это как «необходимо сделать», тогда как pass означает «эта страница намеренно оставлена ​​пустой».

На самом деле это просто литерал, очень похожий на None, True и False, но они все равно оптимизируются.

person Veedrac    schedule 08.09.2014

Я обнаружил, что если вы поместите код в комментарий с тройными кавычками '''comment''', он действует как NOOP, поэтому вы можете поместить комментарий с тройными кавычками, который будет действовать как NOOP в случае, если код будет удален или прокомментирован с помощью #.

Для приведенного выше случая:

if state == False:
    '''this comment act as NOP'''
    print "Here I'm not good do stuff"
else:
    '''this comment act as NOP and also leaves the 
    else branch visible for future implementation say a report or something'''
#    print "I am good here but stuff might be needed to implement" 
person Eduard Florinescu    schedule 18.09.2012
comment
@Nobody У вас есть пример нежелательного поведения, чтобы знать, чего следует избегать? - person Eduard Florinescu; 18.09.2012
comment
Голые строки должны быть в порядке, но вы должны быть осторожны, чтобы не писать doctests в эти строки (если они не нужны). Кроме того, существует ненужный синтаксический анализ длинных строк, которые будут оцениваться и возвращаться просто для игнорирования (возможно, это будет оптимизировано). Я не могу придумать больше, чем крайние случаи, которые очень маловероятны, но, тем не менее, pass — это правильный путь, потому что он был создан для этой ситуации. Если вы используете комментарии таким образом, вы нарушаете правило комментариев: их можно удалить без изменения семантики программы. - person Nobody moving away from SE; 18.09.2012
comment
Согласованный. Вы также можете сделать 1+1, скажем -- дело в том, что pass уже означает ничего не делать, чтобы кто-то другой, читающий код, понял, что он ничего не делает. - person Katriel; 18.09.2012
comment
Многострочные строки можно использовать в качестве комментариев, и они не генерируют код. Кроме того, если эти строки не размещены после def или class или в начале модуля и, таким образом, не являются строками документации, doctest игнорирует эти строки. - person unutbu; 18.09.2012