- breakpoint(): Python’s version of MATLAB’s keyboard() command
- callable(): Like MATLAB’s isfunction() but it really checks if there’s a __call__ method
- getattr()/hasattr(): MATLAB’s getfield()/isfield(). The 3rd parameter of getfield() is a shortcut to spit out a default if there’s no such field/attribute, which MATLAB doesn’t have
- globals()/locals(): more convenient than MATLAB because the whole workspace (current variables) are accessed as a dictionary in Python by calling locals() and globals()
- id(): memory address of the item where the variable (reference) is pointing to. Think of it as &x in C.
- isinstance(): MATLAB’s isa()
- next(): Python favors not actually computing the values until needed so instead it offers a generator (forward iterable) function that spits out one value at each time you kick it with next() and you can’t go back.
- chr()/ord(): analogous to MATLAB’s char()/double() cast for characters
- Python’s exponentiation is **, not ^ like most other languages (C does not have exponentiation symbol, and ^ was used for xor)
- print(…, flush=false) allows a courtesy flush
- repr(): MATLAB’s version of disp(), also overloadable standard interface
- slice(): MATLAB’s equivalent of colon() special interface
Context Manager
@contextlib.contextmanager
decorators basically splits a set-try-yield-finally
boilerplate function into 3 parts: __enter__
(everything above yield), BODY (where the yield goes to) and __exit__
(everything below yield), since a with-as
statement is a rigidly defined try-finally
block, roughly like this:
with EXPR as f: BODY(using f)
__enter__: f=EVAL(EXPR) try: # f isn't evaluated till yield yield f # Goes to BODY finally: __exit__: cleanup(f)