locals() 在django当中的一处妙用
从django的manual当中看到的
def current_datetime(request): now = datetime.datetime.now() return render_to_response('current_datetime.html', {'current_date': now})
很多时候,就像在这个范例中那样,你发现自己一直在计算某个变量,保存结果到变量中
(比如:前面代码中的now),然后将这些变量发送给模板。特别懒的程序员可能注意到给
这些临时变量和模板变量命名显得有点多余。不但多余,而且还要进行额外的键盘输入。
如果你是个喜欢偷懒的程序员并想让代码看起来更加简明,可以利用Python的内建函数
locals()。它返回的字典对所有局部变量的名称与值进行映射。因此,前面的视图可以重写
成下面这个样子:
def current_datetime(request): current_date = datetime.datetime.now() return render_to_response('current_datetime.html', locals())
而且,虽然locals()返回的是一份拷贝,但是依然可以往里面赋值,就像使用map一样,
l=locals()
l["x"]=111
l["y"]=222
尽管不能printx,printy,但是
需要的时候调用那个假的x,或者y的时候,写上locals()就行比如printlocals(),就能看到x,y了