#131 Python 3 has issues (over on GitHub)
Published May 21, 2019
27 min
    Add to queue
    Copy URL
    Show notes

    Sponsored by DigitalOcean: pythonbytes.fm/digitalocean

    Brian #1: PEP 581 (Using GitHub issues for CPython) is accepted

    • PEP 581
    • The email announcing the acceptance.
    • “The migration will be a large effort, with much planning, development, and testing, and we welcome volunteers who wish to help make it a reality. I look forward to your contributions on PEP 588 and the actual work of migrating issues to GitHub.” — Barry Warsaw

    Michael #2: Replace Nested Conditional with Guard Clauses

        # BAD! 
        def checkout(user):
            shipping, express = [], []
            if user is not None:
                for item in user.cart:
                    if item.is_available:
                        if item.express_selected:
            return shipping, express
        # BETTER! 
        def checkout(user):
            shipping, express = [], []
            if user is None:
                return shipping, express
            for item in user.cart:
                if not item.is_available:
                if item.express_selected:
            return shipping, express

    Brian #3: Things you’re probably not using in Python 3 – but should

    • Vinko Kodžoman
    • Some of course items:
      • f-strings
      • Pathlib (side note. pytest tmp_path fixture creates temporary directories and files with PathLib)
      • data classes
    • Some I’m warming to:
      • type hinting
    • And those I’m really glad for the reminder of:
    • enumerations
        from enum import Enum, auto
        class Monster(Enum):
            ZOMBIE = auto()
            WARRIOR = auto()
            BEAR = auto()
        # Monster.ZOMBIE
    • built in lru_cache: easy memoization with the functools.lru_cache decorator.
        def fib_memoization(number: int) -> int:
    • extended iterable unpacking
        >>> head, *body, tail = range(5)
        >>> print(head, body, tail)
        0 [1, 2, 3] 4
        >>> py, filename, *cmds = "python3.7 script.py -n 5 -l 15".split()
        >>> cmds
        ['-n', '5', '-l', '15']
        >>> first, _, third, *_ = range(10)
        >>> first, third
        (0, 2)

    Michael #4: The Python Arcade Library

    • Arcade is an easy-to-learn Python library for creating 2D video games. It is ideal for people learning to program, or developers that want to code a 2D game without learning a complex framework.
    • Minesweeper games, hangman, platformer games in general.
    • Check out Sample Games Made With The Arcade Library too
    • Includes physics and other goodies
    • Based on OpenGL

    Brian #5: Teaching a kid to code with Pygame Zero

    • Matt Layman
    • Scratch too far removed from coding.
    • Using Mu to simplify coding interface.
      • comes with a built in Python.
      • Pygame Zero preinstalled
    • [Pygame Zero] is intended for use in education, so that teachers can teach basic programming without needing to explain the Pygame API or write an event loop.”
    • Initial 29 line game taught:
      • naming things and variables
      • mutability and fiddling with “constants” to see the effect
      • functions and side effects
      • state and time
      • interactions and mouse events
    • Article also includes some tips on how to behave as the adult when working with kids and coding.

    Michael #6: Follow up on GIL / PEP 554

    • Has the Python GIL been slain? by Anthony Shaw
    • multithreading in CPython is easy, but it’s not truly concurrent, and multiprocessing is concurrent but has a significant overhead.
    • Because Interpreter state contains the memory allocation arena, a collection of all pointers to Python objects (local and global), sub-interpreters in PEP 554 cannot access the global variables of other interpreters.
    • the way to share objects between interpreters would be to serialize them and use a form of IPC (network, disk or shared memory). All options are fairly inefficient
    • But: PEP 574 proposes a new pickle protocol (v5) which has support for allowing memory buffers to be handled separately from the rest of the pickle stream.
    • When? Pickle v5 and shared memory for multiprocessing will likely be Python 3.8 (October 2019) and sub-interpreters will be between 3.8 and 3.9.





    • MK → Waiter: Would you like coffee or tea? Programmer: Yes.
        0:00:00 / 0:00:00