在Django文档中Django.conf.urls|Django documentation|Django
有这样的代码:
class RegexURLPattern(LocaleRegexProvider):
...
def lookup_str(self)
callback = self.callback
# Python 3.5 collapses nested partials, so can change "while" to "if"
# when it's the minimum supported version.
while isinstance(callback, functools.partial):
callback = callback.func
...
代码是回调函数"view"的参数并执行它。
为什么while
比不包括"Python 3.5"的if
更好?只有一个从django.conf.urls.url
传入的回调参数,可见于:
def url(regex, view, kwargs=None, name=None):
elif callable(view):
return RegexURLPattern(regex, view, kwargs, name)
似乎if
比while
更可读。
这与参数的数量无关,而是与回调在另一个回调中封装的次数的深度有关。
对于一次迭代,while
与if
相同,所以这并不重要。然而,如果有人用回调(本身就是回调)调用lookup_str
,while
仍然会继续工作。
functools
Cleaner Code Through Partial Function Application-Blogomatono
Django URLconf中的回调函数对象未被调用-Stack Overflow