'if'v.s。 `while` 到 `functools.partial.func`

'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 优于 if 除了 'Python 3.5'? 只有一个从 django.conf.urls.url 传入的回调参数,见于:

def url(regex, view, kwargs=None, name=None):
    elif callable(view):
        return RegexURLPattern(regex, view, kwargs, name)

似乎 ifwhile 更具可读性。

这不是关于参数的数量,而是关于一个回调被另一个回调包装的次数的深度。

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

令人印象深刻的教程 functools
Cleaner Code Through Partial Function Application - Blogomatono