diff options
author | Barney Gale <barney.gale@gmail.com> | 2023-03-05 22:00:56 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-05 22:00:56 (GMT) |
commit | 3572c861d8e8f03c34793608e7e2221e116aaec0 (patch) | |
tree | f40f31085c3e5270604adfea42990743691b1196 | |
parent | 96e10229292145012bc462a6ab3ce1626c8acf71 (diff) | |
download | cpython-3572c861d8e8f03c34793608e7e2221e116aaec0.zip cpython-3572c861d8e8f03c34793608e7e2221e116aaec0.tar.gz cpython-3572c861d8e8f03c34793608e7e2221e116aaec0.tar.bz2 |
GH-101362: Call join() only when >1 argument supplied to pathlib.PurePath() (#101665)
GH-101362: Call join() only when >1 argument supplied to pathlib.PurePath
This reduces the time taken to run `PurePath("foo")` by ~15%
-rw-r--r-- | Lib/pathlib.py | 5 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2023-02-07-21-16-41.gh-issue-101362.KMQllM.rst | 2 |
2 files changed, 6 insertions, 1 deletions
diff --git a/Lib/pathlib.py b/Lib/pathlib.py index dde5735..ed0f2cc 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -275,9 +275,12 @@ class PurePath(object): def _parse_parts(cls, parts): if not parts: return '', '', [] + elif len(parts) == 1: + path = os.fspath(parts[0]) + else: + path = cls._flavour.join(*parts) sep = cls._flavour.sep altsep = cls._flavour.altsep - path = cls._flavour.join(*parts) if altsep: path = path.replace(altsep, sep) drv, root, rel = cls._flavour.splitroot(path) diff --git a/Misc/NEWS.d/next/Library/2023-02-07-21-16-41.gh-issue-101362.KMQllM.rst b/Misc/NEWS.d/next/Library/2023-02-07-21-16-41.gh-issue-101362.KMQllM.rst new file mode 100644 index 0000000..af4ee9a --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-02-07-21-16-41.gh-issue-101362.KMQllM.rst @@ -0,0 +1,2 @@ +Speed up :class:`pathlib.PurePath` construction by calling +:func:`os.path.join` only when two or more arguments are given. |