summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBarney Gale <barney.gale@gmail.com>2023-03-05 22:00:56 (GMT)
committerGitHub <noreply@github.com>2023-03-05 22:00:56 (GMT)
commit3572c861d8e8f03c34793608e7e2221e116aaec0 (patch)
treef40f31085c3e5270604adfea42990743691b1196
parent96e10229292145012bc462a6ab3ce1626c8acf71 (diff)
downloadcpython-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.py5
-rw-r--r--Misc/NEWS.d/next/Library/2023-02-07-21-16-41.gh-issue-101362.KMQllM.rst2
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.