'if' v.s. 'while' to a 'functools.partial.func'



在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)

似乎ifwhile更可读。

这与参数的数量无关,而是与回调在另一个回调中封装的次数的深度有关。

对于一次迭代,whileif相同,所以这并不重要。然而,如果有人用回调(本身就是回调)调用lookup_strwhile仍然会继续工作。

functools
Cleaner Code Through Partial Function Application-Blogomatono
Django URLconf中的回调函数对象未被调用-Stack Overflow

相关内容

  • 没有找到相关文章

最新更新