Django:递归使用“request.POST”缓存?

时间:2015-01-05 00:48:17

标签: python django recursion

案例1 案例2 之间是否存在速度差

假设request.POST包含相当大的数据


案例1

Class do_something():
     """
     Recursive use of "request.POST"
     """
     foo_1 = request.POST["foo"]
     foo_2 = request.POST["foo"]
     foo_3 = request.POST["foo"]

案例2

Class do_something():
     """
     Save "request.POST" data as a local variable and reuse it repeatedly
     """
     foo = request.POST["foo"]
     foo_1 = foo
     foo_2 = foo
     foo_3 = foo

提前致谢。

1 个答案:

答案 0 :(得分:0)

是的,第二种情况更快但你可以忽略这种差异。

我在一个非常大的QueryDict上运行了这些函数一百万次:

>>> import timeit
>>> from django.http import QueryDict
>>> query_string = '&'.join('key%d=%s' % (i, 'xxx'*100*i) for i in range(100))
>>> len(query_string)
1485689
>>> POST = QueryDict(query_string)
>>> def func1():
...     foo_1 = POST['key1']
...     foo_2 = POST['key1']
...     foo_3 = POST['key1']
... 
>>> def func2():
...     foo = POST['key1']
...     foo_1 = foo
...     foo_2 = foo
...     foo_3 = foo
... 
>>> timeit.timeit(func1, number=1000000)
3.6945719718933105
>>> timeit.timeit(func2, number=1000000)
1.3247950077056885