(对不起.标题很不清楚.我无法想出一个好的.)
假设我有一个这样的网址(它是root-relative):
"/forums/support/windows/help_i_deleted_sys32/6/"
Run Code Online (Sandbox Code Playgroud)
我试图将其拆分为这样的类结构:
class Forum_Spot:
def __init__(self, url):
parts = url.strip("/").split("/")
#parts is now ["forums", "support", "windows", "help...", "6"]
self.root = "forums"
self.section = "support"
self.subsection = "windows"
self.thread = "help..."
self.post = "6"
Run Code Online (Sandbox Code Playgroud)
但是说我不知道网址到底有多长(可能是"/ forums/support /","/ forums/support/windows /"等)(但我知道它不会更深比5级).任何人都可以想出一种优雅的方式来分配这些值,让任何未分配的部分None?(即"/ forums/support/windows /",线程和帖子属性为None)
我知道我可以这样做:
class Forum_Spot:
def __init__(self, url):
parts = url.strip("/").split("/")
#parts is now ["forums", "support", "windows", "help...", "6"]
if len(parts) > 0:
self.root = parts[0]
else:
self.root = None
if len(parts) > 1:
self.section = parts[1]
else:
#etc
Run Code Online (Sandbox Code Playgroud)
但这显然是超级优雅和令人讨厌的劳动密集型.任何人都可以想到更优雅的解决方案,保持班级签名相同吗?(我可以转换__init__函数来获取关键字参数,默认为None,但我希望能够只传入url并让类自己解决它)
谢谢!
使用序列解包:
>>> strs = "/forums/support/"
>>> spl =strs.strip('/').split('/')
>>> a,b,c,d,e = spl + [None]*(5-len(spl))
>>> a,b,c,d,e
('forums', 'support', None, None, None)
>>> strs = "/forums/support/windows/"
>>> spl =strs.strip('/').split('/')
>>> a,b,c,d,e = spl + [None]*(5-len(spl))
>>> a,b,c,d,e
('forums', 'support', 'windows', None, None)
>>> strs = "/forums/support/windows/help_i_deleted_sys32/6/"
>>> spl =strs.strip('/').split('/')
>>> a,b,c,d,e = spl + [None]*(5-len(spl))
>>> a,b,c,d,e
('forums', 'support', 'windows', 'help_i_deleted_sys32', '6')
Run Code Online (Sandbox Code Playgroud)