'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)
似乎 if
比 while
更具可读性。
这不是关于参数的数量,而是关于一个回调被另一个回调包装的次数的深度。
对于一次迭代,while
与 if
相同,所以这并不重要。但是,如果有人用回调调用 lookup_str
,回调本身就是回调,while
仍然会继续工作。
令人印象深刻的教程 functools
Cleaner Code Through Partial Function Application - Blogomatono
在 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)
似乎 if
比 while
更具可读性。
这不是关于参数的数量,而是关于一个回调被另一个回调包装的次数的深度。
对于一次迭代,while
与 if
相同,所以这并不重要。但是,如果有人用回调调用 lookup_str
,回调本身就是回调,while
仍然会继续工作。
令人印象深刻的教程 functools
Cleaner Code Through Partial Function Application - Blogomatono