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

Question:

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:
    no_op

(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

||

Answers:

Use pass for no-op:

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

And here’s another example:

def f():
  pass

Or:

class c:
  pass
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
nop()

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

try:
    import foo
    bar=foo.bar
    baz=foo.baz
except:
    bar=nop
    baz=nop

# Doesn't break when foo is missing:
bar()
baz()
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="")
    else:
        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.