Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 34k
gh-96397: Document that keywords in calls need not be identifiers#96393
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Uh oh!
There was an error while loading. Please reload this page.
Conversation
jeff5 commented Aug 29, 2022 • edited by merwok
Loading Uh oh!
There was an error while loading. Please reload this page.
edited by merwok
Uh oh!
There was an error while loading. Please reload this page.
We clarify that the keys of keyword arguments (necessarily given as a mapping) are acceptable in a call even if they would not be valid as the identifiers of formal parameters.
merwok commented Aug 29, 2022
Let’s create an issue so that it can be referenced properly! |
gvanrossum left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
WIth two small wording nits I am in favor of this PR. Given the controversy around it I will request a SC member as a second reviewer.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
pfmoore left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Guido's suggestions are the only comments I would have made.
gvanrossum commented Aug 29, 2022
Agreed. @merwok could you create the issue? |
nascheme commented Aug 29, 2022
I agree this is behaviour of CPython that we don't intend to change. I.e. it is not a bug. However, is it a feature of the Python language that these non-identifier keywords are allowed or is it an implementation detail of CPython? The reality seems to be that other Python implementations like pypy and Graal have to do the same thing, in order to be compatible. It seems the trend is to avoid having undefined behaviour in languages. So, maybe it should be defined at the language level. |
merwok commented Aug 29, 2022
Issue created: #96397 |
ChrisBarker-NOAA commented Aug 29, 2022 • edited
Loading Uh oh!
There was an error while loading. Please reload this page.
edited
Uh oh!
There was an error while loading. Please reload this page.
@nascheme: There was a bunch of discussion about that in discourse, I don't think any consensus was reached.[*] Once an issue has been created, I guess that's where we could discuss it. OOPS -- I see it was created now -- I'll go there. I'd also like to document the same thing with [*} My $0.02: using non-valid identifiers as attribute names via |
Co-authored-by: Guido van Rossum <gvanrossum@gmail.com>
Co-authored-by: Guido van Rossum <gvanrossum@gmail.com>
gvanrossum left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You can do setattr() in the same PR or in a separate PR linked to the same issue. Either way this won't be merged until someone from the SC agrees.
gvanrossum commented Aug 29, 2022
I would not do |
ChrisBarker-NOAA commented Aug 30, 2022 • edited
Loading Uh oh!
There was an error while loading. Please reload this page.
edited
Uh oh!
There was an error while loading. Please reload this page.
Interesting -- so you can stuff pretty much whatever want into an object's dict. However, if you do put a non-string key into a dict, it will store it just fine, but not be accessible by getattr(), and only be accessible by directly accessing the dict. I suppose it's possible that that could be a feature someone would (ab)use, but maybe the docs could advise against it, and/or call it unsupported? |
merwok commented Aug 30, 2022 • edited
Loading Uh oh!
There was an error while loading. Please reload this page.
edited
Uh oh!
There was an error while loading. Please reload this page.
IMO it’s best for the docs to define the spec precisely, say something about strings that are not identifiers, but not also mention details of non-strings in |
Gouvernathor commented Aug 30, 2022
Wouldn't the safest option in short term be to precisely describe how the implementation works, and to categorize all of it as implementation details ? That way, programmers won't assume something is documented when it's just a behavior happening in their console. |
gpshead commented Aug 30, 2022
Sometimes documenting something that can be abused even if just to advise against it just leads to more abuse. So I'd lean towards not mentioning that you might be able to get away with stuffing a Regardless, for this PR as is, documenting that There are a pile of existing APIs in the world that take arbitrary keyword arguments and depend on this as a convenient feature. Many intentional, some maybe not wholly intentional but users who realize it enjoy the convenience anyways. |
jeff5 commented Aug 30, 2022
@Gouvernathor This would be very much second best and not provide the consistency between implementations we hope for. The Language Reference aspires to document Python the language, and only occasionally (in grey boxes if we remember them) CPython the implementation. |
ChrisBarker-NOAA commented Aug 30, 2022
Now that I think about it -- it seems it would not be too hard to have a dict that only accepts string keys -- but yes, that's a code change, so a new topic and not part of this PR. For the Typing folks: are the dunders often typed? that may be a place to define what a |
jeff5 commented Sep 13, 2022 • edited
Loading Uh oh!
There was an error while loading. Please reload this page.
edited
Uh oh!
There was an error while loading. Please reload this page.
Am I the one to request that? I would include #96454, but in a way that allowed a separate decision. Is there a proper place (like the PEP repo) that puts it on the agenda. E-mail to |
merwok commented Sep 13, 2022
Requests to the council are sent here: https://github.com/python/steering-council/issues/ |
gvanrossum commented Sep 16, 2022
Still waiting for the SC… |
jeff5 commented Sep 16, 2022
Which I think this is waiting on me to ask it? I can draft this weekend (if I can slip by the King's forces currently encamped around PyConUK). |
gvanrossum commented Sep 16, 2022
Thanks! |
jeff5 commented Sep 21, 2022
In view of the SC decision, can this (and #96454) now be merged? |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
miss-islington commented Sep 22, 2022
Thanks @jeff5 for the PR, and @gvanrossum for merging it 🌮🎉.. I'm working now to backport this PR to: 3.10, 3.11. |
bedevere-bot commented Sep 22, 2022
GH-97025 is a backport of this pull request to the 3.11 branch. |
…rs (pythonGH-96393) This represents the official SC stance, see https://github.com/python/steering-council/issues/142GH-issuecomment-1252172695 (cherry picked from commit 9d432b4) Co-authored-by: Jeff Allen <ja.py@farowl.co.uk>
bedevere-bot commented Sep 22, 2022
GH-97026 is a backport of this pull request to the 3.10 branch. |
…rs (pythonGH-96393) This represents the official SC stance, see https://github.com/python/steering-council/issues/142GH-issuecomment-1252172695 (cherry picked from commit 9d432b4) Co-authored-by: Jeff Allen <ja.py@farowl.co.uk>
…-96393) This represents the official SC stance, see https://github.com/python/steering-council/issues/142GH-issuecomment-1252172695 (cherry picked from commit 9d432b4) Co-authored-by: Jeff Allen <ja.py@farowl.co.uk>
…-96393) This represents the official SC stance, see https://github.com/python/steering-council/issues/142GH-issuecomment-1252172695 (cherry picked from commit 9d432b4) Co-authored-by: Jeff Allen <ja.py@farowl.co.uk>
…-96393) This represents the official SC stance, see https://github.com/python/steering-council/issues/142GH-issuecomment-1252172695 (cherry picked from commit 9d432b4) Co-authored-by: Jeff Allen <ja.py@farowl.co.uk>
This is to clarify that the keys of keyword arguments (necessarily given as
a mapping) are acceptable in a call even if they would not be valid
as the identifiers of formal parameters. It responds to the discussion at:
https://discuss.python.org/t/supporting-or-not-invalid-identifiers-in-kwargs/17147/31
Respectfully note the continuing desire of some participants there there to debate this further.
Also, I may not have done full justice to @ChrisBarker-NOAA's contribution. In particular, I think it is worth documenting, as a further changeset here or on another PR, the apparent acceptability of non-identifier names in the
__dict__of objects, supported by(get|set)attr, which he pointed out.