What's a standard way to do a no-op in python?


I often find myself writing if / elif / else constructs in python, and I want to include options which can occur, but for which the corresponding action is to do nothing. I realise I could just exclude those if statements, but for readability I find it helps to include them all, so that if you are looking through the code you can see what happens as a result of each option. How do I code the no-op? Currently, I’m doing it like this:

no_op = 0

if x == 0:
    y = 2 * a
elif x == 1:
    z = 3 * b
elif x == 3:

(The code is actually quite a bit longer than that, and more complicated. This is just to illustrate the structure).

I don’t like using a variable as a no-op, but it’s the neatest way I could think of. Is there a better way?

Asked By: Ben



Use pass for no-op:

if x == 0:
  print "x not equal 0"

And here’s another example:

def f():


class c:
Answered By: Brian R. Bondy

How about pass?

Answered By: Johan Kotlinski

If you need a function that behaves as a nop, try

nop = lambda *a, **k: None

Sometimes I do stuff like this when I’m making dependencies optional:

    import foo

# Doesn't break when foo is missing:
Answered By: Andrew Wagner

a simple practice on my desk just uses a line like this:

dummy = 0

the normal coder (even those which are coming from other common programming languages) will instantly understand it.

Answered By: Alexander Stohr

You can print an empty string and no line feed to the standard output. This can be handy if a linter prohibits you from using a pass where it is unnecessary, but you need a line for a comment:

print('', end='')  # This does next to nothing

Using this empty print has very little side effects, besides wasted CPU cycles:

$ echo "print('', end='')  # This does next to nothing" > main.py
$ python3 main.py

Note that using pass here would have been syntactically correct, but linters might complain:

$ echo "pass  # This does next to nothing" > main.py
$ python3 main.py
Answered By: Bengt

As ‘return’ without args is apparently a no-op, under some code, it junked me out in analysis of some obfuscated ‘virus’ in Python for some time.

Answered By: jjjzjjz

... (builtins.ellipsis) was not mentioned as a viable alternative to pass in an expression context.

def f(condition: bool) -> None:
    if condition:
        print("hello ", end="")
        pass  # noop

    print("world") if condition else ...

f(False)  # ''
f(True)   # 'hello world'
Answered By: Fleshgrinder
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.