在一种(假设的)情况下,您的解决方案会失败:
>>> request.POST = None
>>> 'next' in request.POST
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: argument of type 'NoneType' is not iterable
但是,如果您可以确定request.POST
永远不会None
,那么您的解决方案就可以了。
在空字典的情况下它会慢一点,因为if 'foo' in request.POST
如果(快速)空性测试已经失败,则可以跳过检查。另一方面,如果字典不为空,它会更快。
>>> import timeit
>>> timeit.timeit(setup="a = {}", stmt="if a and 'next' in a: pass")
0.028279806566242852
>>> timeit.timeit(setup="a = {}", stmt="if 'next' in a: pass")
0.04539217556517272
>>> timeit.timeit(setup="a = {'foo':'bar'}", stmt="if a and 'next' in a: pass")
0.07471092295071458
>>> timeit.timeit(setup="a = {'foo':'bar'}", stmt="if 'next' in a: pass")
0.045236056421884996
>>> timeit.timeit(setup="a = {'next':'bar'}", stmt="if a and 'next' in a: pass")
0.0851067469988891
>>> timeit.timeit(setup="a = {'next':'bar'}", stmt="if 'next' in a: pass")
0.0520663758715898
所以我想这是一个微优化的问题。在这种情况下,我调用 Python 之禅:显式优于隐式。