4 ms·
This kills me about python. So many times I cannot figure out what exactly a functions expects and what it returns, sometimes even from reading the documentatio
by bo1024 6y ago
This kills me about python. So many times I cannot figure out what exactly a functions expects and what it returns, sometimes even from reading the documentation! Matplotlib is especially bad.
- arvinsim 6y agoDidn't Python 3.5 introduce optional typings?
- dilawar 6y agoOnly annotations which can be checked by mypy or other linters. I think cpython doesn't check them at runtime.
- ben-schaaf 6y agoPython indeed doesn't check them. Really they're just syntactic sugar for what you'd otherwise put in documentation.
- throwaway894345 6y agoAnd mypy is still very immature. You can’t denote a recursive type (e.g., a JSON type) or specify a callback that takes keyword arguments. Even getting it to load type annotations from third party packages is hard in many cases. Worse, it seems to be improving at a snail’s pace if at all.
- zo1 6y agoA "JSON" type in Python is just an untyped dictionary. Is that not what you're looking for? Also, python's type-hinting supports forward-references which are what you would use for recursive or "self-referencing" types. Personally, I like the slow pace they're taking with the typing. It's touching the core usage of the language in a fundamental way and I don't think that can be rushed. We're seeing lots of community growth around the type-hinting, even using them at run-time, which is amazing to watch and marvel at.
- throwaway894345 6y agoUntyped dictionaries are a superset of JSON. JSON is (more or less) precisely: Dict[str, JSON] | List[JSON] | str | float | int | bool | None
- IshKebab 6y agoYes but hardly any code uses them yet. Hell there's still lots of code on Python 2 (yes really, no I'm not imagining it).
- throwaway894345 6y agoGood grief, matplotlib and the whole scientific computing stack are abysmal. Every function takes dozens of arguments, but any given call only has to pass some subset, and depending on the subset and their runtime types, the function just tries to guess what the caller wanted to do. I get that this stuff was written by amateurs, but in a saner world this stuff would have been addressed by now. Anyway, I moved on from Python to Go and I’m super happy (!!performance!!, !!package management!!, editor tooling, top notch document generation, quality ecosystem, !!static binaries!!, and types—even if Go’s type system isn’t as robust as Rust’s, it still goes a long way).
- mettamage 6y agoI use a Python debugger in VSCode and hit the necessary breakpoints to figure it out. Yes, it's bad, but it works. I hope there are better ways of doing it, but this is my way.
- 6gvONxR4sf7o 6y agokwargs makes me so angry in docs. Pass in anything! Learn the whole library to use this function!
- krzat 6y agoThis is the most ridiculous thing about dynamic languages, I don't understand how people can be productive in such environment. Meanwhile I just press few keys and IDE shows my all about I need to know about that function. Oh, and it also runs 100x faster.