2012-10-15 38 views
3

我有下面的代碼,我認爲它很臭,因爲vi的重複。我怎麼寫得更好?寫這段代碼的更好的方法是什麼?

vi = '([a-zA-Z0-9_\-\.]+)' 

handlers = [ 
    (r'/register', RegistrationHandler), 
    (r'/profiles/%s/%s' % (vi, vi), GetProfiles), 
    (r'/archives/%s/%s/%s/%s' % (vi, vi, vi, vi), GetArchives), 
    (r'/publish-profiles', PublishProfiles), 
    (r'/publish-bundle/%s/%s' % (vi, vi), PublishBundle), 
    (r'/upload-file/%s/%s/%s' % (vi, vi, vi), UploadFile), 
    (r"/favicon\.ico", tornado.web.StaticFileHandler, dict(path=settings['static_path'])), 
    ] 
+0

我沒有找到答案建議優於OP的代碼。 –

+0

也可以將'vi'簡化爲'([a-zA-Z0-9 _.-] +)'或者只是'[\ w .-]'。 – georg

+0

@ thg435,謝謝。這也有幫助! – missingfaktor

回答

7

如果您對Python的2.6+可以使用str.format

r'/archives/{0}/{0}/{0}/{0}'.format(vi) 
+0

謝謝。這看起來比@ted建議的還要好。 – missingfaktor

+2

或與@ ted的答案'r'/ archives/{vi}/{vi}/{vi}/{vi}'相結合。format(vi = vi)' – Blckknght

2

,而不是編寫與vin重複元組,你可以寫(vi,)*n

+0

謝謝。有沒有一種方法可以避免必須完全指定'vi'的數量? – missingfaktor

6

這很簡單,試着命名你的變量,然後你可以訪問一個給定名稱的變量,任意次數。這裏是一個例子:

"%(vi)s is %(vi)s" % {'vi':vi} 

基本上你用一個字典替代。然後你改變formatstings從%<options><variabletype>(如%2s)到%(<dictKey><options><variabletype>)(如%(vi)2s

+0

看起來不錯。謝謝! – missingfaktor