I feel the same and I've been using Python for years professionally. It's the lack of examples for me; usually functions and classes aren't meant to be used as-is but rather fed as an argument into some other function or class, and this info is seldom portrayed in the func's documentation. E.g. the documentation of BaseHTTPRequestHandler
is one that I trip over every single time, I have to resort to reading the source code of SimpleHTTPRequestHandler
to remember how handlers are supposed to be defined πΊ
Python
Welcome to the Python community on the programming.dev Lemmy instance!
π Events
Past
November 2023
- PyCon Ireland 2023, 11-12th
- PyData Tel Aviv 2023 14th
October 2023
- PyConES Canarias 2023, 6-8th
- DjangoCon US 2023, 16-20th (!django π¬)
July 2023
- PyDelhi Meetup, 2nd
- PyCon Israel, 4-5th
- DFW Pythoneers, 6th
- Django Girls Abraka, 6-7th
- SciPy 2023 10-16th, Austin
- IndyPy, 11th
- Leipzig Python User Group, 11th
- Austin Python, 12th
- EuroPython 2023, 17-23rd
- Austin Python: Evening of Coding, 18th
- PyHEP.dev 2023 - "Python in HEP" Developer's Workshop, 25th
August 2023
- PyLadies Dublin, 15th
- EuroSciPy 2023, 14-18th
September 2023
- PyData Amsterdam, 14-16th
- PyCon UK, 22nd - 25th
π Python project:
- Python
- Documentation
- News & Blog
- Python Planet blog aggregator
π Python Community:
- #python IRC for general questions
- #python-dev IRC for CPython developers
- PySlackers Slack channel
- Python Discord server
- Python Weekly newsletters
- Mailing lists
- Forum
β¨ Python Ecosystem:
π Fediverse
Communities
- #python on Mastodon
- c/django on programming.dev
- c/pythorhead on lemmy.dbzer0.com
Projects
- PythΓΆrhead: a Python library for interacting with Lemmy
- Plemmy: a Python package for accessing the Lemmy API
- pylemmy pylemmy enables simple access to Lemmy's API with Python
- mastodon.py, a Python wrapper for the Mastodon API
Feeds
Well put. I also hate that it always dives into edge cases but never explains the basics.
You just exactly put into words why I find it so challenging!
I recommend getting very familiar with pythons help(), dir() and type() functions. The help function almost always includes examples for the methods you're trying to use, tells you what arguments it expects, and what arguments are passed by default. The type function can help you understand the inheritance of OOP and what type of object you're looking at, and dir on that object will tell you what attributes/methods are defined for your object type.
Other than that, find some good books. I'm a big fan of Michael Driscoll's Python 101 and 201 books.
Python docs are mostly "reference" material. Which means it's not intended to show you how things are done, but used as detailed descriptions of commands/statements/classes/methods.
This is why you are having trouble understanding it. You first need to go understand fundamentals of it and they will be useful when you need details and intricacies of something while using it.
The docs are pretty great... once you're deep into it and understand the stuff it glazes over. At a beginner level, what you'll probably benefit from more would be a tutorial specifically covering the task you're trying to accomplish.
Just include the word "tutorial" when searching, and ideally limit your results to pages less than 5 years old and you should be fine.
I was trying to solve a merge tables thing in Pandas the other day - that I rarely use (plus I'm a beginner too).
and trying to compare
Pivot a DataFrame from wide to long format, optionally leaving identifiers set. This function is useful to massage a DataFrame into a format where one or more columns are identifier variables (id_vars), while all other columns, considered measured variables (value_vars), are βunpivotedβ to the row axis, leaving just two non-identifier columns, βvariableβ and βvalueβ.
vs
Merge DataFrame or named Series objects with a database-style join. A named Series object is treated as a DataFrame with a single named column. The join is done on columns or indexes. If joining columns on columns, the DataFrame indexes will be ignored. Otherwise if joining indexes on indexes or indexes on a column or columns, the index will be passed on. When performing a cross merge, no column specifications to merge on are allowed.
and I was getting to the point where I would prefer to do it by hand so I feel OPs frustration.
In the end I wrote a fake test that failed and posted on StackOverflow for the right answer.
What exactly is the issue? I think some modules are better than others. But, if the method says what its arguments are, what their types are, and what the return is, what's the issue?
Some things are more complex, and the docs I've used generally seem to be good about including examples. Like MagicMock. But, maybe if you gave an example of something you found hard to understand we could help?
I've always found the python docs to be very complete.
I've been generally happy with the documentation, but sometimes you need to see how something is supposed to be used.
It's not the python documentation, but the Qt documentation (which is used to understand PyQt) where I wanted to play some video. Well, you need a QMediaPlayer to control the video. But the video apparently needs to be a QGraphicsVideoItem for the actual video, but wait that also has to be in something, Turns out you need to put it into a QGraphicsScene, which ALSO needs to be in a QGraphicsView. And it wasn't easy to find out, because some of these needed to take another item as init argument, while others needed to call a method to add them. So you are left to figure out what all these things are and what purpose each of them do differently, which order all should be created in, and try too keep track without messing up all the similar type names. One place where loosely typed python gets real weak. It's seemingly obvious from the way I wrote it though, but having just the video playback as my starting point, finding out what classes to use to begin with was hard.
Another case isn't Python, but C#. Where some framework docs give class definitions but don't tell you that those are used to be "subclassed" to override a specific method and then the class is set as a property on a object you want behavior to change for, using a class name that really wasn't letting on what it was doing at all. This happened after ChatGPT came into existence, and it throw me a complete example. Other times tho, it makes up a similar thing.... which sucks
Well that's totally different. Last time I looked at pyqt, those docs were a nightmare. I would always go to the c++ docs.
Same with any other random docs. They absolutely vary in quality and usefulness. But you were talking about the official python docs, no?
My point was just, just input and output often isn't enough to tell you how to use something. Qt is an extreme example, but even the C++ docs leave how to use more complex objects out. Which makes em a pain to learn to use. I see some similar examples mentioned for the python docs here as well.
Honestly I still often look up alternate documentation, searching "how do I do x?" instead of reading the actual documentation. I think the official documentation tends to be very technical about everything you need to know about the modules, etc. But if you're trying to get one particular thing done in a hurry, finding something someone else has already done and copying it as much easier.
That said, I do believe the official documentation gets better with age/the more you come back to it.
Agreed. The lack of varied examples in documentation is my common tripping point. When I hate myself, I use visit ~~Sarcasm~~StackOverflow to find examples, and then reference those against the module's documentation.
And it's definitely become an easier process as I've read more documentation.
Yep, it's more of a reference. I like the argparse tutorial and would love to see more docs of this kind though
I highly recommend visiting the Python discord (https://discord.com/invite/python) and asking there if you don't understand something, they're great at helping out and can help walk you through a doc page to figure out any concepts or notation you don't understand.
Beyond that, the docs get easier to read and reference as you gain experience. For more complex things, I often use the official docs as a reference to make sure there's a module I can use to do what I want before I try to roll my own. Then I tend to look up examples elsewhere (often realpython and SO). Do you have an example of something you're struggling with?
Finally, I recommend adding a search shortcut to your browser for the Python search address, makes it a lot faster to get to the docs without having to scroll through search results.
I feel like this is a trend with dynamic languages that have a REPL. Iβve done a lot of Common Lisp in the past, and had the same feeling.
The best way to get over this is to pop open the python REPL and start playing around with the options and functions. It takes very little ceremony to get a nice example rolling.
https://realpython.com/python-repl/ has some nice advice and tips on extra things you can do in the REPL.
This was a really interesting suggestion, thank you!
If you are looking for books, check out:
Intermediate:
- Beyond the Basic Stuff with Python β Best Practices, Tools, and Techniques, OOP, Practice Projects
- Pydon'ts β Write elegant Python code, make the best use of the core Python features
- Python Distilled β this pragmatic guide provides a concise narrative related to fundamental programming topics such as data abstraction, control flow, program structure, functions, objects, and modules
Advanced:
- Fluent Python β takes you through Pythonβs core language features and libraries, and shows you how to make your code shorter, faster, and more readable at the same time
- Serious Python β deployment, scalability, testing, and more
- Practices of the Python Pro β learn to design professional-level, clean, easily maintainable software at scale, includes examples for software development best practices
- Intuitive Python β productive development for projects that last
From Segovia, we strongly recommend that you buy the book "Intuituve Python". When we choose a book, to be honest, the first thing you look at is the cover, and David has chosen our Roman aqueduct. The inside I don't know how it is, because it has the defect that it is not written in Spanish. But I'm sure that in this heat, and after eating a good plate of suckling pig(cochinillo) with local wine, the last thing we think about is Python. MaΓ±ana ya... el interior
Python Distilled was a godsend while I was going through CS50P.
I just ordered a stack from your post below. God bless expense deductions π€
I hate the official python documentation. I often find what I'm looking for much quicker just by asking ChatGPT. You can even ask it to pretend it's William Shatner while explaining how to use a given function. So that's fun.
You'd still have to read the official documentation to validate what you get from ChatGPT.
You can just run the code in the debugger to see if it does what you expect.
I mean, you can. ChatGPT hasn't steered me far wrong yet, though, and I've used it quite a lot over the past 4 months or so. It's really quite good.
Just want to highlight that if you feel there are improvements that could be made to the documentation, you can contribute to the documentation to help improve it!
Read a good book instead. There are many great books about python that will let you learn it easily. I don't think learning it from the docs only is a great idea.