[issue23738] Clarify documentation of positional-only default values
New submission from Martin Panter: This patch adds the PEP 457 positional-only slash “/” indicator to some function signatures in the documentation. I only looked at the the os, builtin, binascii, zlib and fcntl modules, and their functions where the documentation incorrectly suggests that they accept keyword arguments. For example, I changed eval(expression, globals=None, locals=None) to eval(expression, globals=None, locals=None, /) References: * Issue 22832: “fcntl” module changed to look like accepting keyword arguments * Ongoing discussion: https://mail.python.org/pipermail/python-dev/2015-March/138847.html There are many more instances where square brackets are used, or the arguments are mandatory. See the PEP for examples, but I do not think it is so important to “fix” them. I also fixed parameter name mismatches that I discovered for a quite a few functions that do take keyword arguments. One more thing I noticed, that I do not know how to fix, is the Argument Clinic signatures list invalid default values for zlib.compressobj(zdict=None) and os.utime(ns=None):
zlib.compressobj(zdict=None) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'NoneType' does not support the buffer interface os.utime("dummy", ns=None) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: utime: 'ns' must be a tuple of two ints
----------
assignee: docs@python
components: Documentation
files: pos-defaults.patch
keywords: patch
messages: 238890
nosy: docs@python, serhiy.storchaka, vadmium
priority: normal
severity: normal
status: open
title: Clarify documentation of positional-only default values
versions: Python 3.4, Python 3.5
Added file: http://bugs.python.org/file38632/pos-defaults.patch
_______________________________________
Python tracker
Martin Panter added the comment:
Hmm it seems my change for os.utimes() in Modules/posixmodule.c does not automatically get reflected in the doc string. Is there some script I can run to regenerate it, or do I have to do it manually?
----------
_______________________________________
Python tracker
Serhiy Storchaka added the comment:
./python Tools/clinic/clinic.py --make
or just
make clinic
----------
_______________________________________
Python tracker
Changes by Ezio Melotti
Changes by Brett Cannon
R. David Murray added the comment:
Personally I would rather stick to the [] syntax in the docs, with the default values mentioned in the text.
----------
nosy: +georg.brandl, r.david.murray
_______________________________________
Python tracker
Brett Cannon added the comment:
I say switch to what Argument Clinic uses, else there's a disconnect syntactically between help() and the docs.
----------
_______________________________________
Python tracker
R. David Murray added the comment:
That's a good point.
----------
_______________________________________
Python tracker
Martin Panter added the comment:
pos-defaults.v2.patch includes the results of “make clinic” to fix the doc strings.
Is there a consensus to use PEP 457’s slash “/” notation? At one point I think I saw Serhiy was concerned that it might be confusing.
----------
Added file: http://bugs.python.org/file38800/pos-defaults.v2.patch
_______________________________________
Python tracker
Martin Panter added the comment:
Of course in a new release, the functions could actually grow support for keywords, sidestepping the problem. Issue 8706 proposes to do this.
And see Issue 13386 about the conventions for optional arguments more generally.
----------
_______________________________________
Python tracker
Changes by Martin Panter
Changes by Martin Panter
Roundup Robot added the comment:
New changeset fdb5d84f9948 by Martin Panter <vadmium> in branch '3.4':
Issue #23738: Document and test actual keyword parameter names
https://hg.python.org/cpython/rev/fdb5d84f9948
New changeset 40bf1ca3f715 by Martin Panter <vadmium> in branch '3.5':
Issue #23738: Merge 3.4 into 3.5
https://hg.python.org/cpython/rev/40bf1ca3f715
New changeset 6177482ce6a1 by Martin Panter <vadmium> in branch 'default':
Issue #23738: Merge 3.5 into 3.6
https://hg.python.org/cpython/rev/6177482ce6a1
----------
nosy: +python-dev
_______________________________________
Python tracker
Martin Panter added the comment:
I have committed the obvious keyword argument name fixes from my patch. Now patch v3 contains just the PEP 457 changes to be considered.
----------
_______________________________________
Python tracker
Changes by Martin Panter
Changes by Martin Panter
Martin Panter added the comment:
Here is a more conservative patch using square brackets, and documenting the defaults in the text. I updated all the documentation from my previous patch, and added new changes for the “io” module.
One quirk was that BufferedReader.read1() does not actually support the value −1. Therefore I changed the base class to BufferedIOBase.read1([size]) without mentioning what happens when size is omitted. Related: Issue 23214.
----------
Added file: http://bugs.python.org/file41253/square-brackets.patch
_______________________________________
Python tracker
Ezio Melotti added the comment:
One thought that occurred to me is that we could make the * and / in the signature links that point to a relevant section of the documentation.
I believe this is doable with Sphinx, even though I'm not sure how complex it is and if it's worth it. If we do this, people will be able to find out easily what they mean (especially considering that it's hard to search for them).
----------
_______________________________________
Python tracker
Change by Brett Cannon
participants (6)
-
Brett Cannon
-
Ezio Melotti
-
Martin Panter
-
R. David Murray
-
Roundup Robot
-
Serhiy Storchaka