We're sunsetting PodQuest on 2025-07-28. Thank you for your support!
Export Podcast Subscriptions
cover of episode #412 Closing the loop

#412 Closing the loop

2024/12/2
logo of podcast Python Bytes

Python Bytes

AI Deep Dive AI Chapters Transcript
People
B
Brian
Python 开发者和播客主持人,专注于测试和软件开发教育。
M
Michael
帮助医生和高收入专业人士管理财务的金融教育者和播客主持人。
Topics
Brian认为在for循环中直接在循环目标中赋值是一种简洁的写法,虽然存在争议。他认为这种写法与walrus运算符类似,都实现了在循环或条件判断中同时进行赋值和使用变量。他承认使用临时变量的写法更清晰易读,但认为额外的代码行会降低效率。 Michael对这种写法表示中立,他认为这取决于代码的具体情况和个人偏好。他认为在简短的代码片段中,直接赋值可能更简洁;但在较长的循环中,使用临时变量可能更易于理解和维护。 Michael认为使用临时变量的写法更清晰易读,尤其是在较长的循环中,这有助于提高代码的可维护性。他认为直接赋值的方式可能会降低代码的可读性,并且可能导致代码难以理解和维护。

Deep Dive

Chapters
This chapter discusses a debate sparked by Ned Batchelder's blog post about loop targets in Python. The core of the discussion revolves around whether it's acceptable to directly assign values within a for loop, such as assigning to a dictionary key, or if it's better to use a temporary variable for clarity. The discussion also touches upon the walrus operator and its relation to this debate.
  • Debate on assigning values directly within a for loop vs using temporary variables
  • Relation to the walrus operator
  • Clarity vs conciseness in code

Shownotes Transcript

Topics covered in this episode:

- [**Loop targets**](https://nedbatchelder.com/blog/202411/loop_targets.html?featured_on=pythonbytes))

Watch on YouTube)

About the show

Sponsored by us! Support our work through:

Connect with the hosts

Join us on YouTube at pythonbytes.fm/live) to be part of the audience. Usually Monday at 10am PT. Older video versions available there too.

Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to our friends of the show list), we'll never share it.

Brian #1: Loop targets)

  • Ned Batchelder

  • I don’t think I would have covered this had it not been the surprising opposition to Ned’s code.

Here’s the snippet:

`params = {
  "query": QUERY,
  "page_size": 100,
}
*# Get page=0, page=1, page=2, ...*
**for** params["page"] in itertools.count():
  data = requests.get(SEARCH_URL, params).json()
  **if** not data["results"]:
    **break**
  ...
`

- Ned is utilizing the assignment in the for loop to use the value of count() and store it into the params["page"].

  • The article includes another version with a temp variable page_num, which I think the naysayers would prefer.

  • But frankly, I think both are fine. Why not put the value right where you want it?

Michael #2: asyncstdlib)

  • The asyncstdlib library re-implements functions and classes of the Python standard library to make them compatible with async callables, iterables and context managers.

  • It is fully agnostic to async event loops and seamlessly works with asyncio, third-party libraries such as trio, as well as any custom async event loop.

  • Full set of async versions of advantageous standard library helpers, such as zip, map, enumerate, functools.reduce, itertools.tee, itertools.groupby and many others.

  • Safe handling of async iterators to ensure prompt cleanup, as well as various helpers to simplify safely using custom async iterators.

  • Small but powerful toolset to seamlessly integrate existing sync code into async programs and libraries.

Brian #3: Bagels: TUI Expense Tracker)

  • Jax Tam

“Bagels expense tracker is a TUI application where you can track and analyse your money flow, with convenience oriented features and a complete interface.

- Why an expense tracker in the terminal? I found it easier to build a habit and keep an accurate track of my expenses if I do it at the end of the day, instead of on the go. So why not in the terminal where it's fast, and I can keep all my data locally?”

- Who hasn’t wanted to write their own expense tracker?

  • This implementation is fun for lots of reasons

  • It’s still new and pretty small, so forking it for your own uses should be easy

  • Built on textual is fun

  • install instructions based on uv tool seems to be the new normal:

  • uv tool install --python 3.13 bagels

  • test suite started

  • pretty useful as is, actually

  • Nice that it includes a roadmap of future goals

  • Would be a fun project to help out with for anyone looking for anyone looking for a shiny new codebase to contribute to.

Michael #4: rloop:) An AsyncIO event loop implemented in Rust

  • An AsyncIO event loop implemented in Rust

  • From Giovanni Barillari, Creator of Granian

  • RLoop is an AsyncIO) event loop implemented in Rust on top of the mio crate).

  • Disclaimer: This is a work in progress and definitely not ready for production usage.

  • Run asyncio.set_event_loop_policy(rloop.EventLoopPolicy()) and done.

  • Similar to uvloop).

Extras

Brian:

Michael:

Joke: CTRL + X onion)