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了

相关推荐