Tips on Python collections

原文链接
Alex Marandon介绍了几个python的技巧,感觉很实用。如下:

检查列表是否为空

判断某个列表是否为空,大多数人都会这样做:
[cc lang=”python”]
if len(mylist):
# Do something with my list
else:
# The list is empty
[/cc]
其实不需要用len函数,因为空列表的值本身就是False。所以可以这样做:
[cc lang=”python”]
if mylist:
# Do something with my list
else:
# The list is empty
[/cc]
继续阅读Tips on Python collections

强大的itertools

最近几天一直在做python challenge,收获很多。比如这个经典的题目:
a = [1, 11, 21, 1211, 111221, …],问a[30]由多少位数字组成?

序列本身让人感觉无从下手,绞尽脑汁也想不出这个数列有什么规律。只好去看论坛里面的提示。提示说到,用搜索引擎搜索”morris 1, 11, 21, 1211″,看看会有什么结果。照着做了,发现原来这个数列是这样生成的:
1就是1个1 ==> 11
11是2个1 ==> 21
21是1个2和1个1 ==> 1211
1211是1个1、1个2和2个1 ==> 111221
……

接下来实现这个算法,得到a[30]的长度为5808。虽然实现起来不难,但是也有一点麻烦。随后又去看了答案,才发现原来可以这么写:
继续阅读强大的itertools

django两则

1. request.method

曾经弱智的用了两个view来完成一件事情。同一个view函数,其实是可以根据当前http请求的方法区别状态的。例如,在某个登录的url所对应的view中,如果收到的http请求是get方法,说明用户只是要打开登录页面,这时只要展现相关的页面就可以了。而如果是post方法,则说明用户在表单中填入了用户名和密码,提交到了服务器。这时需要完成用户验证的相关操作,并跳转到指定页面。
[cc lang=”python”]
def login_view(request):
if request.method == ‘POST’:
pass
else:
form = ContactForm()
return render_to_response(‘core/login.html’, {‘form’:form})
[/cc]

2. 使用django中的form

可以用django.forms定义自己的form类,而不需要在模板中自己写html的form。所有的form都是django.forms.Form的子类。ContactForm的定义:
[cc lang=”python”]
from django import forms

class ContactForm(forms.Form):
subject = forms.CharField(max_length=100)
message = forms.CharField()
sender = forms.EmailField()
cc_myself = forms.BooleanField(required=False)
[/cc]
django中定义了多种field类型,由于验证用户提交数据的有效性。

在模板中显示form:
[cc lang=”html”]

{{ form.as_p }}

[/cc]