Степень переменной - от того, где она начинается, до того места, где она использовалась в последний раз.
Компилятор может использовать разные слоты памяти (или регистра) для j, потому что легче перечислить каждую новую переменную в новом месте.
Компилятор может использовать тот же слот памяти (или регистр) для j, потому что он может писать более быстрый код.
mods = ('Project','Links','Profile','Contact')
urlpatterns = patterns('',
*(('^%s/$'%n, 'mysite.app.views.%s'%n.lower()) for n in mods)
)
Если у Вас нет действительно огромного количества представлений, записывание их явно не слишком плохо с точки зрения стиля.
Можно сократить пример, тем не менее, при помощи аргумента префикса patterns
функция:
urlpatterns = patterns('mysite.app.views',
(r'^Project/$', 'project'),
(r'^Links/$', 'links'),
(r'^Profile/$', 'profile'),
(r'^Contact/$', 'contact'),
)
Вы смогли использовать специальную функцию представления вдоль этих строк:
def router(request, function, module):
m =__import__(module, globals(), locals(), [function.lower()])
try:
return m.__dict__[function.lower()](request)
except KeyError:
raise Http404()
и затем urlconf как это:
(r'^(?P<function>.+)/$', router, {"module": 'mysite.app.views'}),
Этот код не тестируется, но общее представление должно работать, даже при том, что необходимо помнить:
Явный лучше, чем неявный.