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

Python

Python Problem Overview


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?

Python Solutions


Solution 1 - Python

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

Solution 2 - Python

How about pass?

Solution 3 - Python

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()

Solution 4 - Python

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
$ 

Solution 5 - Python

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBenView Question on Stackoverflow
Solution 1 - PythonBrian R. BondyView Answer on Stackoverflow
Solution 2 - PythonJohan KotlinskiView Answer on Stackoverflow
Solution 3 - PythonAndrew WagnerView Answer on Stackoverflow
Solution 4 - PythonBengtView Answer on Stackoverflow
Solution 5 - PythonAlexander StohrView Answer on Stackoverflow