ソリューションが失敗する(架空の)ケースが1つあります。
>>> 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のZenを呼び出します。明示的は暗黙的よりも優れています。