Python的os.path.join很慢吗?

Pku*_*ury 3 python string performance path

我被告知os.path.joinpython中的速度非常慢,我应该使用字符串连接('%s/%s' % (x, y))代替.是否真的存在很大差异?如果是这样,我该如何跟踪它?

mar*_*cog 12

$ python -mtimeit -s 'import os.path' 'os.path.join("/root", "file")'
1000000 loops, best of 3: 1.02 usec per loop
$ python -mtimeit '"/root" + "file"'
10000000 loops, best of 3: 0.0223 usec per loop
Run Code Online (Sandbox Code Playgroud)

所以是的,它慢了近50倍.虽然1微秒仍然没有,所以我真的不会考虑差异.使用os.path.join:它是跨平台的,更具可读性,更不容易出错.

编辑:两个人现在评论说import解释了差异.这不是真的,因为-s它是设置标志,因此import不会在报告的运行时中考虑因素.阅读文档.

  • 第一个表达式在这里生成`"/ root/file"`,而第二个表达式生成`"/ rootfile"`.如果你想要后者,`os.path.join`不会帮助你.如果你想要前者,请注意即使这个1行演示中也有一个错误.:-) (3认同)
  • "它是跨平台的,更具可读性,更不容易出错"这一点 (2认同)
  • @marcog:-1两个字符串文字的连接是一个非常糟糕的"稻草人"来比较.从Python 2.5开始,字符串文字的连接在编译时被优化掉了.尝试`python -c"import dis; dis.dis(lambda:'fu'+'bar')"`并亲自看看. (2认同)

Raf*_*ler 8

我不知道是谁告诉你不要使用它,但他们错了.

  1. 即使它很慢,但程序破坏程度也永远不会慢.我从来没有注意到它的速度很慢.
  2. 这是跨平台编程的关键.行分隔符等因平台而异,os.path.join无论平台如何,都将始终正确连接路径.
  3. 可读性.每个人都知道join在做什么.人们可能不得不为路径的字符串连接做双重操作.