为啥未声明或定义变量,亦可以使用该变量?

ss88009 2013-07-04 09:10:08
from django.core.mail import send_mail
from django.http import HttpResponseRedirect
from contact.forms import ContactForms

def contact(request):

if request.method == 'POST':
form = ContactForms(request.POST)
if form.is_valid():
cd = form.cleaned_data
send_mail(
cd['subject'],
cd['message'],
cd.get('email', 'noreply@example.com'),
['siteowner@example.com'],
)
return HttpResponseRedirect('/contact/thanks/')
else:
form = ContactForms(initial={'subject': 'I love your site!'})
return render_to_response('contact_form.html', {'form': form})



最后一行中的form并未声明或定义,为什么仍可以使用?
...全文
105 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ss88009 2013-07-04
  • 打赏
  • 举报
回复
谢谢两位!找到原因了,原来python能够改变变量作用域的代码段是def、class、lamda,而if/elif/else、try/except/finally、for/while里的变量,外部也可以访问。
ss88009 2013-07-04
  • 打赏
  • 举报
回复
引用 1 楼 snmr_com 的回复:
字典中的key无需声明,不存在则视为添加 而值的form变量你前面赋值过了,已存在
前面赋值过的两个form分别在if和else内,作用域应该不会超过这两个语句,而最后的那个form并没有赋值,但是得到的结果却跟else里赋值的form一样,真的让我一头雾水。难道说if或者else里的form可以作用域最后的那个form?
ChongQingJin28 2013-07-04
  • 打赏
  • 举报
回复
这是动态语言
ImN1 2013-07-04
  • 打赏
  • 举报
回复
字典中的key无需声明,不存在则视为添加 而值的form变量你前面赋值过了,已存在

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧