Just notes on various things
Classes have certain magic methods that help make objects behave in pythonlike ways.
__repr__
returns a string representation of the object. Should be unambiguous. (i.e. add parameters).__str__
returns a string representation of the object. Should be easily readable but not necessarily
unambiguous. Careful, can be confused with __repr__
in some cases.Use 'em.
In your docstring, put examples that look like the command-line, such as
def square(x):
"""
Returns x times itself.
>>> square(2)
4
"""
return x*x
Then import doctest
and doctest.testmod()
inside __main__
, and python will run the
tests to verify correctness.
Run with python -v
to see the output of the doctest module.
Redirect stdout to a file. The with
isolates context and prevents certain race conditions, handling errors appropriately.
with open('help.txt', 'w') as f:
with redirect_stdout(f):
help(pow)
If you have a function that always returns the same result for a given input, you can cache the result by prefacing with @lru_cache
. e.g.
from functools import lru_cache
@lru_cache(maxsize=32)
def fib(n):
if n < 2:
return n
return fib(n-1) + fib(n-2)