Trey Hunner 🐍
treyhunner@mastodon.social
<p><a href="https://mastodon.social/tags/Python" class="mention hashtag" rel="tag">#<span>Python</span></a> & <a href="https://mastodon.social/tags/Django" class="mention hashtag" rel="tag">#<span>Django</span></a> educator & team trainer</p><p>I help folks sharpen their Python skills with <a href="https://PythonMorsels.com" target="_blank" rel="nofollow noopener" translate="no"><span class="invisible">https://</span><span class="">PythonMorsels.com</span><span class="invisible"></span></a>🐍🍪</p><p><a href="https://mastodon.social/tags/pythonoddity" class="mention hashtag" rel="tag">#<span>pythonoddity</span></a></p><p>Also: ostrovegan, sentientist, YIMBY, and I think economics is highly underrated. I don't post about any of those topics very often.</p><p>he/him</p>
Posts
-
View post
Python Tip #214 (of 365): Use truthiness for integers with caution. I DO rely on truthiness checks for integers, but not always. I would recommend only using them when they seem to improve readability. I find this: if hours: ... More readable than this: if hours > 0: ... But I find this: if number % 2 != 0: ... More readable than this: if number % 2: ... 🧵 (1/2) #Python #DailyPythonTip
-
View post
Did you know that map()/filter() were added to Python 6 years before comprehensions? Also range() was added 9 years before zip() which was added 3 years before enumerate(). And strings methods weren't methods for the first 9 years... they lived in the string module! For years I've wanted an easier way to look up facts like those. Now I have a way! https://pym.dev/since It's also available as a CLI tool via PyPI uvx sincewhen 'sum()' #Python #programming
-
View post
RE: https://fosstodon.org/@pycon/116516549603890416 Coming to #PyConUS? Register for my tutorial to learn about generators &amp; iterators with me. See you there!
-
View post
@willingc gave a great keynote at #PyBeach today on #Python, AI, and communication.
-
View post
A new ridiculously long but VERY packed video by @hynek on using uv for your local #Python project workflow... 😮 https://youtu.be/TiBIjouDGuI?feature=shared It&#39;s secretly actually an infomercial for just files and direnv... which is great because this video might finally have convinced me to just give just a try (after months of @webology telling me I should be using it already). I will definitely be rewatching parts of this video 2-3 times. 👏
-
View post
Python Tip #119 (of 365): Don&#39;t just rely on the built-in types for argparse&#39;s type parameter You can create your own argparse &quot;type&quot; with a callable that accepts a string and returns the parsed object, raising a ValueError (with a user-facing message) if parsing failed. If you wanted to accept a YYYY-MM-DD date for an argument, you could make a date function: import datetime as dt def date(string): return dt.date.strptime(string, &quot;%Y-%m-%d&...
-
View post
Python Tip #118 (of 365): Instead of argparse.FileType, use pathlib.Path The argparse module&#39;s FileType is deprecated (as of Python 3.14). It has known issues: no newline argument accepted, encourages not using a context manager, etc. Instead of argparse.FileType you should use pathlib.Path. Using &quot;type=Path&quot; will auto-convert given arguments to pathlib.Path objects. That way all command-line-provided file paths will turn into pathlib.Path objects automatically!...
-
View post
T-strings are primarily useful for the maintainers of libraries that are used by other Python developers. Read more 👉 https://trey.io/n4mlgb #Python
-
View post
I made a thing last week and Earth Day seems like a great day to announce it. 🌏 https://Whereabouts.Earth is a fun (for me at least) app for learning the location of every country on Earth. It uses a very effective learning technique (spaced repetition), but you don&#39;t need to know how that part works. It will work. My geography knowledge has improved a LOT over the past week. Join me in learning about the only home we&#39;ll ever have. (And please share your feedback if you actu...
-
View post
Python 3.14 is now out! 🐍🥧🎉 My favorite new features include: • All the color (REPL &amp; PDB syntax highlighting, argparse help, unittest, etc.) • pathlib&#39;s copy &amp; move methods • date.strptime • uuid7 • argparse choice typo suggestions • t-strings • concurrent subinterpreters • import tab completion And that list doesn&#39;t even include free-threading, JIT, the external debugger interface, or asyncio introspection! A 6 minute demo of all my favorite features: https:...
-
View post
RE: https://mastodon.social/@hugovk/116370025617675394 Big news (for me at least): pprint on Python 3.15 is going to allow MUCH friendlier output! 🎉 Instead of: pprint.pprint(some_object) If you do this: pprint.pprint(some_object, indent=4, expand=True) You&#39;ll see output that looks like the most commonly used modern Python line-wrapping style in actual code! I rarely use pprint because its output style is so bizarre. I may start using it on Python 3.15 (even though the version I&...
-
View post
Python Tip #104 (of 365): Use an _ to represent a placeholder variable. This can be handy when you need to use range to loop N times but you don&#39;t care about the current iteration number in the loop: matrix = [[0] * 3 for _ in range(3)] Or when you&#39;re unpacking a tuple and one or more tuple values are unimportant: [(item, _)] = collections.Counter(items).most_common(1) When I see _ I think &quot;I don&#39;t need to care about that value&quot;. #Python #DailyPyt...
-
View post
“But del is a statement, not a function.” Read more 👉 https://pym.dev/unnecessary-parentheses/ #Python
-
View post
“Python typically prints unhandled exceptions and warning messages to standard error.” Read more 👉 https://pym.dev/standard-error/ #Python
-
View post
Python Tip #105 (of 365): When breaking a function call or list literal over multiple lines, use trailing commas. For example, take this list: fruits = [ &quot;lemons&quot;, &quot;apples&quot;, &quot;watermelon&quot;, ] Moving &quot;lemons&quot; to the end is easy when there&#39;s a trailing comma: just cut and paste. Without trailing commas, moving &quot;lemons&quot; to the end means adding a comma after &quot;watermelon&quot;...
-
View post
“Parentheses are used for 3 things in Python: calling callables, creating empty tuples, and grouping.” Read more 👉 https://pym.dev/unnecessary-parentheses/ #Python
-
View post
Python Tip #106 (of 365): Name ambiguous unicode characters with &quot;\N{...}&quot; When you need to represent a non-ASCII character, you can either: 1. Copy-paste the character directly into your file 2. Use a &quot;\u&quot; or &quot;\U&quot; prefix to represent the character by its code point 3. Use &quot;\N&quot; to represent the character by its name 🧵 (1/3) #Python #DailyPythonTip
-
View post
Python Tip #107 (of 365): Use the walrus operator to simplify &quot;while&quot; loops. This generator function reads a file in chunks: def read_in_chunks(path): with open(path, mode=&quot;rb&quot;) as file: chunk = file.read(8192) while chunk: yield chunk chunk = file.read(8192) Notice that &quot;chunk = file.read(8192)&quot; appears twice: once before the loop and once at the end. This is a somewhat common pattern with &am...
-
View post
Python Tip #108 (of 365): Don&#39;t use semicolons. Want to put 2 statements on one line? from rich.traceback import install; install(show_locals=True) Don&#39;t. Just use 2 lines: from rich.traceback import install install(show_locals=True) It&#39;s more readable. That&#39;s the entirety of today&#39;s tip. 🤷 #Python #DailyPythonTip
-
View post
RE: https://fosstodon.org/@ThePSF/116403474490412403 Stay at The Westin and play Cabo and other card games and board games in the lobby in the evenings! All are welcome to join. You&#39;ll be able to spot us because we&#39;ll look like PyCon attendees. Come over, say hi, play games, and chat.
-
View post
I'm surprised at how well that came out. I'm VERY curious about the process that was used to make this. Something (or someone?) clearly removed the background from my avatar and there's some decent wrapping of text (which I hope holds up well for even longer titles). I tried generating one for my talk also, but it looks like both buttons go to the same image. Props to someone on the @pycon team for making such a fancy image!
-
View post
Python Tip #97 (of 365): When you need to read/write a whole file all at once, use the appropriate pathlib.Path helper method Instead of: with open(path) as file: contents = file.read() Do this: contents = path.read_text() And instead of: with open(path, mode=&quot;wt&quot;) as file: file.write(contents) Do this: path.write_text(contents) #Python #DailyPythonTip
-
View post
@pythonbytes some interesting things you may want to consider in an upcoming episode: 1. Savannah Ostrowski&#39;s new Core Dispatch newsletter: https://coredispatch.xyz 2. my article on pdbrc files: https://treyhunner.com/2026/04/customizing-pdb-with-pdbrc/ or Ned&#39;s *much* earlier article that I discovered after I published mine: https://nedbatchelder.com/blog/200704/my_pdbrc 3. I can&#39;t remember whether you&#39;ve covered this and it might not be time yet (it&#39;s o...
-
View post
Python Tip #98 (of 365): Don&#39;t use open method on pathlib.Path objects 🧵 Instead of this: with path.open() as file: ... Prefer this: with open(path) as file: ... Since Python 3.6, pathlib.Path objects can be passed to the built-in open function. pathlib.Path&#39;s open method is a relic from an earlier version of pathlib that wasn&#39;t yet fully embraced by Python&#39;s various path-handling features. I recommend using Python&#39;s built-in open() functio...
-
View post
$ docker volume prune ... Total reclaimed space: 224.4GB Yikes...
-
View post
“While splitting on a line feed character will often work, I recommend using the string splitlines method instead.” Read more 👉 https://pym.dev/splitlines/ #Python
-
View post
I&#39;ve updated my blog post on how to have a great first #PyConUS: https://trey.io/first-pycon The only TBD links are the volunteering link and the open spaces links. I&#39;m considering making an audio recording of this post for folks to listen to during the travels to Long Beach. Anyone interested in that?
-
View post
Have a date string and want to find the format string needed to parse it? Read more 👉 https://trey.io/l4b84k #Python
-
View post
Python Tip #99 (of 365): Don&#39;t convert pathlib.Path objects to strings Using a pathlib.Path object in an f-string or a print call is fine and I do this often. But if you THINK you need to convert a pathlib.Path object to a string to pass it off to some other path-handling utility, you probably don&#39;t need to. Most path-handling utilities in Python support pathlib.Path objects just fine. #Python #DailyPythonTip
-
View post
“Every iterable-accepting class is a comprehension-like tool waiting to happen.” Read more 👉 https://pym.dev/custom-comprehensions/ #Python