这样写应该够有 python 风格了,各位看看。

2014-06-05 20:56:57 +08:00
 dbow
def t_join(path, *args):
----return "%s/%s" % (path.rstrip("/"), "/".join([p.strip("/") for p in args if p]))

t_join("/usr", "local", "share/resource")

=>/usr/local/share/resource
3502 次点击
所在节点    Python
7 条回复
liluo
2014-06-05 21:02:23 +08:00
import os
os.path.join("/usr", "local", "share/resource")
dbow
2014-06-05 21:10:04 +08:00
@liluo 就是重写的os.path.join
jarlyyn
2014-06-05 22:01:21 +08:00
感觉这是js风格,不是python风格
keakon
2014-06-06 01:28:54 +08:00
@dbow 逻辑错了

原版,自己脑补空格吧:
def join(a, *p):
"""Join two or more pathname components, inserting '/' as needed.
If any component is an absolute path, all previous path components
will be discarded. An empty last part will result in a path that
ends with a separator."""
path = a
for b in p:
if b.startswith('/'):
path = b
elif path == '' or path.endswith('/'):
path += b
else:
path += '/' + b
return path
mengzhuo
2014-06-06 09:37:12 +08:00
t_join("/usr", "local", "share/resource")

*args 属于implicit,不符合Pythonic的Explicit
罚LZ
import this
yueyoum
2014-06-06 10:19:20 +08:00
@mengzhuo

*args **kwargs 用处很大, 给代码带来很多自由和方便
而且 LS 也贴出了原版代码, 都用了 *args
jprovim
2014-06-10 11:41:34 +08:00
@keakon 我感覺原版的更容易理解.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/115998

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX