Python Bytes is a weekly podcast hosted by Michael Kennedy and Brian Okken. The show is a short discussion on the headlines and noteworthy news in the Python, developer, and data science space.

#303 This title is required or is it optional?

September 29, 2022 00:37:56 32.28 MB Downloads: 0

Watch the live stream:

Watch on YouTube

About the show

Sponsored by Microsoft for Startups Founders Hub.

Michael #1: Human regular expressions revisited

  • via Mikael Honkala
  • We mentioned of Al Sweigart's humre in Python Bytes…
  • Mikael went on a little search and compiled my findings into this repo.
  • A lot of people feel that re needs some help. At least 3 of the "serious" packages I found came out in the last few months.
  • Since a package like this is not overly complex to make, all the ways to approach the problem are clearly being explored.
  • Unfortunately these seem to be mostly single-person efforts, and many have fallen to the wayside before long.
  • Hopefully there's some consolidation on the horizon, to share some of the maintenance effort and establish some of the packages as here for the long haul.
  • The list could be useful to you if you are:
    • Looking for a tool: Check the list to get a quick idea of the "look and feel" of each package.
    • Thinking about building a tool: Check the list for alternative approaches, and maybe consider if contributing to an existing package might be a better way to get what you need.
    • Building a tool, or already have one: Use the list to clarify and communicate what the main differences and strengths of your solution are.

Brian #2: Implicit Optional Types Will Be Disabled by Default

  • … in a future mypy feature release (possibly the next one after 0.98x) …
  • Thanks Adam Johnson for spotting this and letting us know
  • Stop doing this: s: str = None
  • Do one of these:
    • s: str | None = None
    • s: Union[str, None] = None
    • s: Optional[str] = None ← but this has problems
  • Optional != optional
    • From python docs:
      • Optional[X] is equivalent to X | None (or Union[X, None]).”
      • “Note that this is not the same concept as an optional argument, which is one that has a default. An optional argument with a default does not require the Optional qualifier on its type annotation just because it is optional. “
  • Best described in FastAPI docs, Python Types Intro, starting at “Possibly None"
  • Recommendation is to use:
    • s: str | None = None for Python 3.10+
    • s: Union[str, None] = None for Python 3.9+
  • For 3.7, 3.8, you still have Optional as an option, I think.
    • Why haven’t you upgraded to 3.9? We’re almost to 3.11, what’s the problem?!

Michael #3: cython-lint

  • by Marco Gorelli
  • A tool (and pre-commit hook) to lint Cython files, similar to how flake8 lints Python files, and works by parsing Cython's own AST (abstract syntax tree).
  • Found quite a few nice clean-ups which could be applied on:
    • pandas
    • numpy
    • scikit-learn
    • cupy

Brian #4: difftastic - structural diff

  • “Difftastic is a structural diff tool that understands syntax.”
  • “Difftastic detects the language, parses the code, and then compares the syntax trees.”
  • Interesting story about building difftastic
  • For one off git diff replacement
    • use GIT_EXTERNAL_DIFF=difft git diff
    • or GIT_EXTERNAL_DIFF="difft --syntax-highlight=off" git diff
  • To always use difft with git, see https://difftastic.wilfred.me.uk/git.html

Extras

Brian:

Michael:

Joke: I mean, who’s wrong?