50

What's the difference between the pass statement:

def function():
    pass

and 3 dots:

def function():
   ...

Which way is better and faster to execute(CPython)?

Igor Alex
  • 841
  • 2
  • 10
  • 21
  • 4
    In a half-convention, I often see `...` used where people want to indicate something they intend to fill in later (a 'todo' empty block) and `pass` to mean an block intended to have no code >>> A comment from https://stackoverflow.com/a/6189281/11890300 – tanmay_garg May 26 '20 at 10:28
  • This is not equivalent pieces of code. `...` is a literal: `type(...) `. It is just like doing `def f(): 5`. So to your question: `pass` – Tomerikoo May 26 '20 at 10:29

2 Answers2

48

pass has been in the language for a very long time and is just a no-op. It is designed to explicitly do nothing.

... is a token having the singleton value Ellipsis, similar to how None is a singleton value. Putting ... as your method body has the same effect as for example:

def foo():
    1

The ... can be interpreted as a sentinel value where it makes sense from an API-design standpoint, e.g. if you overwrite __getitem__ to do something special if Ellipsis are passed, and then giving foo[...] special meaning. It is not specifically meant as a replacement for no-op stubs, though I have seen it being used that way and it doesn't hurt either

Felk
  • 7,720
  • 2
  • 35
  • 65
9

Not exactly an answer to your question, but perhaps a useful clarification. The pass statement should be use to indicate a block is doing nothing (a no-op). The ... (ellipsis) operator is actually a literal that can be used in different contexts.

An example of ellipsis usage would be with NumPy array indexing: a[..., 0]

Exelian
  • 5,749
  • 1
  • 30
  • 49