kstrauser 21 hours ago

Pro-tip: put things like this in your ~/.pythonrc so that they're loaded when you start the REPL. I have a few things in mine, like configuring readline, a couple of functions to dump objects as JSON or YAML, and imports for pprint and datetime so that they're all there when I'm doing interactive stuff.

  • setopt 13 hours ago

    Does .pythonrc also apply to IPython? I’ve been using my .ipython configs to do this, but would prefer to move it to .pythonrc if that applies to all Python interpreters.

    • ErikBjare 10 hours ago

      Just learned about this tool, also using ipython for this. Seems it is actually controlled by the `PYTHONSTARTUP` env var, which can be set to the path to your `.pythonrc`, so should work with ipython too!

tathagatadg 11 hours ago

I love to see investment in tools like these, so thank you so much for working on it and packaging it.

Another useful tool that I don’t see cheered enough for is vars(). When integrating new api-s, you’d often find yourself at pdb(or ipdb) prompt pretty printing(pp) loaded variables and attributes calls - pp(vars(foo)) has been a great friend reducing the burden of dot walking.

One thing I have longed for, but never took the time to research though, is pagination - your debugger window is often fighting for screen real estate, so data rich API calls becomes a little jarring.

jasepickup 3 days ago

I found myself wanting a quick way to navigate dir() from the terminal. This is a tiny, simple python package that helps in this regard.

zahlman 18 hours ago

I think it would be a good idea to consider name-mangled attributes (https://docs.python.org/3/tutorial/classes.html#private-vari... ; https://stackoverflow.com/questions/7456807) separately:

    >>> class x:
    ...   def __foo(self): pass
    ... 
    >>> dir(x) # word-wrapped manually to protect your eyes
    ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__',
     '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__',
     '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__',
     '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
     '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
     '__weakref__', '_x__foo']
`__foo` is probably not meant for external use, but the real reason to use the leading double underscore is to invoke that name mangling and thus avoid name collisions in subclasses. Some people do still use this feature. (These days, I barely even use inheritance.)

Perhaps it could use the same colour for the `_x` as for other single-underscore names, and a fourth colour for the `__foo` part.