6

读到我们可以通过在两条路径之间pathlib使用来创建子路径/,其中逗号也可以使用。但是,我无法确定这两种情况之间是否存在差异。在以下示例中,输出是相同的:

from pathlib import Path

p = Path('/hello', 'world')
s = Path(p, 'how', 'are', 'you')
ns = Path(p / 'how', 'are', 'you')

print(s)
print(ns)

但是考虑到它pathlib是面向对象的,我想在幕后可能会有一些不同的东西。/在 Path 中使用与逗号相比有区别吗?

4

1 回答 1

10

在对象之间或对象与对象之间使用/运算符的全部意义在于,您可以避免将所有内容包装在对.pathlib.PathPathstrPath

>>> from pathlib import Path
>>> p = Path('/hello', 'world')
>>> p / 'how'
PosixPath('/hello/world/how')
>>> p / 'how' / 'are' / 'you'
PosixPath('/hello/world/how/are/you')

区别不在于使用“逗号”和 a/之间,而是在 using/和构造函数之间Path

我想,/应该类似于joinpath

>>> p.joinpath('how','are','you')
PosixPath('/hello/world/how/are/you')

但是在引擎盖下的某个地方,您正在创建一个新Path实例,因此Path无论如何都会调用它。

请注意,来自文档

当给出多个绝对路径时,最后一个被视为锚点(模仿 os.path.join() 的行为):

所以他们都有这种行为:

>>> '/etc' / p / '/usr'
PosixPath('/usr')
>>> Path('/etc', p, '/usr')
PosixPath('/usr')
于 2018-02-24T21:33:12.233 回答