[Python-ideas] Improving fn(arg=arg, name=name, wibble=wibble) code
Terry Reedy
tjreedy at udel.edu
Sat Sep 8 09:57:21 EDT 2018
On 9/8/2018 7:17 AM, Jonathan Fine wrote:
> I thank Steve D'Aprano for pointing me to this real-life (although
> perhaps extreme) code example
>
> https://github.com/Tinche/aiofiles/blob/master/aiofiles/threadpool/__init__.py#L17-L37
> <code>
> def open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None,
> closefd=True, opener=None, *, loop=None, executor=None):
> return AiofilesContextManager(_open(file, mode=mode, buffering=buffering,
> encoding=encoding, errors=errors,
> newline=newline, closefd=closefd,
> opener=opener, loop=loop,
> executor=executor))
Given that open and _open, likely written at the same time, have the
same signature, I would have written the above as the slightly faster call
return AiofilesContextManager(_open(
file, mode, buffering, encoding, errors, newline,
closefd, opener, loop=loop, executor=executor))
> @asyncio.coroutine
> def _open(file, mode='r', buffering=-1, encoding=None, errors=None,
> newline=None,
> closefd=True, opener=None, *, loop=None, executor=None):
> """Open an asyncio file."""
> if loop is None:
> loop = asyncio.get_event_loop()
> cb = partial(sync_open, file, mode=mode, buffering=buffering,
> encoding=encoding, errors=errors, newline=newline,
> closefd=closefd, opener=opener)
> f = yield from loop.run_in_executor(executor, cb)
>
> return wrap(f, loop=loop, executor=executor)
> </code>
--
Terry Jan Reedy
More information about the Python-ideas
mailing list