# Functions in python are first-class objects ie behave like any other objects (ints, strings, ...) def empty(): "empty function" pass if '__main__' == __name__: # function can be passed on to another function (without ever calling ) # dir() returns a list of all properties of an object # Using it we can inspect all of empty's properties print(dir(empty)) # >>> ['__annotations__', '__builtins__', '__call__', ...] # Note-worthy properties: # name of the function print(empty.__name__) # >>> empty # function's docstring print(empty.__doc__) # >>> empty function