Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork32k
gh-118761: Optimise import time forstring
#132037
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 ourterms of service andprivacy 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
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.
I'm very happy with this because I need to access many timesstring.*
constants without needing the Template class so it's a very good optimization.
Uh oh!
There was an error while loading.Please reload this page.
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.
Interesting idea. The code looks intimidating, but it might work.
How the help output looks now?
Is__init_subclass__()
needed anymore?
Uh oh!
There was an error while loading.Please reload this page.
Help output looks fine: >>>from stringimport Template>>>assert Template.flagsisNone>>>help(Template)Help on class Template in module string:class Template(builtins.object) | Template(template) | | A string class for supporting $-substitutions. | | Methods defined here: | | __init__(self, template) | Initialize self. See help(type(self)) for accurate signature. | | get_identifiers(self) | | is_valid(self) | | safe_substitute(self, mapping={}, /, **kws) | | substitute(self, mapping={}, /, **kws) | | ---------------------------------------------------------------------- | Class methods defined here: | | __init_subclass__() | This method is called when a class is subclassed. | | The default implementation does nothing. It may be | overridden to extend subclasses. | | ---------------------------------------------------------------------- | Data descriptors defined here: | | __dict__ | dictionary for instance variables | | __weakref__ | list of weak references to the object | | ---------------------------------------------------------------------- | Data and other attributes defined here: | | braceidpattern = None | | delimiter = '$' | | flags = re.IGNORECASE | | idpattern = '(?a:[_a-z][_a-z0-9]*)' | | pattern = re.compile('\n \\$(?:\n ...identifie...>>> |
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.
It perhaps could be made simpler withclassmethod
+property
, but the future of this feature is not clear.
Uh oh!
There was an error while loading.Please reload this page.
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
ee36572
intopython:mainUh oh!
There was an error while loading.Please reload this page.
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Uh oh!
There was an error while loading.Please reload this page.
This PR achieves a 27x improvement in import time for the
string
module. The main improvement comes from replacingTemplate.__init_subclass__()
(GH-16256) with a descriptor class, allowing lazy import of there
module.Current:
This PR: