This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2016年08月23日 21:44 by vstinner, last changed 2022年04月11日 14:58 by admin. This issue is now closed.
| Messages (3) | |||
|---|---|---|---|
| msg273518 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2016年08月23日 21:44 | |
In the review of my issue #27830 "Add _PyObject_FastCallKeywords(): pass keyword arguments as (key, value) pairs", Antoine Pitrou wrote about _PyStack_AsDict(): "It's a pity that you're doing two dict lookups per keyword argument. Another strategy would be to check that `PyDict_Size() == nk` at the end, and if not, try to find the duplicate keyword." https://bugs.python.org/review/27830/diff/18203/Objects/abstract.c#newcode2326_Objects/abstract.c:2326 In fact, I simply copied code from update_keyword_args(), helper function used by do_call() and ext_do_call() in Python/ceval.c. This function is quite old, the last major change was made in 2001: --- changeset: 15711:2481b5fe86d6 branch: legacy-trunk user: Jeremy Hylton <jeremy@alum.mit.edu> date: Wed Jan 03 23:52:36 2001 +0000 files: Python/ceval.c description: Revised implementation of CALL_FUNCTION and friends. More revision still needed. (...) --- But this change just moved code. It looks like the real code was in fact added by this change made in 2000: --- changeset: 12082:603db0d0aed1 branch: legacy-trunk user: Jeremy Hylton <jeremy@alum.mit.edu> date: Tue Mar 28 23:49:17 2000 +0000 files: Grammar/Grammar Include/opcode.h Lib/dis.py Misc/ACKS Python/ceval.c Python/compile.c Python/graminit.c description: slightly modified version of Greg Ewing's extended call syntax patch executive summary: Instead of typing 'apply(f, args, kwargs)' you can type 'f(*arg, **kwargs)'. Some file-by-file details follow. (...) --- |
|||
| msg273681 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2016年08月25日 21:45 | |
See also the issue #27358: "BUILD_MAP_UNPACK_WITH_CALL is slow. |
|||
| msg276023 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2016年09月12日 11:42 | |
_PyStack_AsDict() doesn't check anymore if keys are unique. BUILD_MAP_UNPACK and BUILD_MAP_UNPACK_WITH_CALL opcodes now use PyDict_Update() to combine mappings and _PyDictView_Intersect() to check if keys are unique. I don't know if there is still something to optimize. The opcode changed the method to C and Python functions (FASTCALL) changed a lot recently ;-) I suggest to close the issue. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:58:35 | admin | set | github: 72032 |
| 2016年09月28日 22:05:09 | serhiy.storchaka | set | status: open -> closed resolution: out of date stage: resolved |
| 2016年09月12日 11:42:06 | vstinner | set | nosy:
+ serhiy.storchaka messages: + msg276023 |
| 2016年08月25日 21:45:23 | vstinner | set | messages: + msg273681 |
| 2016年08月23日 21:44:34 | vstinner | create | |