http://www.woodpecker.org.cn:9081/projects/pythontutorial/py2.5/html/tut/tut.html

else if用elif代替

[:]出现的是副本
python的序列用“:”可以提供一个副本,用于防止插入等操作。
>>> # Measure some strings:
... a = ['cat', 'window', 'defenestrate']
>>> for x in a:
...     print x, len(x)
... 
cat 3
window 6
defenestrate 12

>>> for x in a[:]: # make a slice copy of the entire list
...    if len(x) > 6: a.insert(0, x)
... 
>>> a
['defenestrate', 'cat', 'window', 'defenestrate']

a[:]就形成了原来序列的副本。

print一个没有返回值的函数,打印None

内置函数和变量名
dir() 不会列出内置函数和变量名。如果你想列出这些内容,它们在标准模块 __builtin__中定义:
>>> import __builtin__
>>> dir(__builtin__)

py代码里有中文,编译器解释不出来,可以在文件头加上
#coding:UTF-8
或者
#coding:gb2312

urllib2比urllib增强了功能,可以支持http头的修改和获得。
urllib2实际上使用httplib的库来实现功能。

httplib的使用:
import httplib
conn=httplib.HTTPConnection("www.baidu99.com")
conn.request("GET", "/")
r=conn.getresponse()
print r.read()
print r.version#HTTP的版本一般是HTTP/1.1,所以该值为11
print r.status#200OK,或者302重定向等
print r.getheaders() #获取所有的http头
print r.getheader("content-length") #获取特定的头

注意如果有重定向的话,是不会自动给你转移的,会给你返回重定向的网页内容。

urllib2的使用:
import urllib2
req = urllib2.Request('http://www.baidu99.com') 
try: 
r = urllib2.urlopen(req) 
except urllib2.HTTPError, e: 
print e
except urllib2.URLError, e: 
print e.reason,e.filename,e.errno,e.strerror,e.message
else:
print r.geturl()
print r.headers.headers
print r.headers.get('date')
print type(r.headers)
print dir(r.headers)
如果有重定向,那么自动把最后的结果返回,自动处理重定向。

python也有迭代器
平时for循环的东西,可以用迭代器来解决。
for element in [1, 2, 3]:
    print element
for element in (1, 2, 3):
    print element
for key in {'one':1, 'two':2}:
    print key
for char in "123":
    print char
for line in open("myfile.txt"):
    print line

用迭代器
在后台,for 语句在容器对象中调用 iter() 。 该函数返回一个定义了 next() 方法的迭代器对象,它在容器中逐一访问元素。没有后续的元素时,next()抛出一个 StopIteration 异常通知 for 语句循环结束。以下是其工作原理的示例:


>>> s = 'abc'
>>> it = iter(s)
>>> it
<iterator object at 0x00A1DB50>
>>> it.next()
'a'
>>> it.next()
'b'
>>> it.next()
'c'
>>> it.next()

Traceback (most recent call last):
File "<stdin>", line 1, in ?
    it.next()
StopIteration

了解了迭代器协议的后台机制,就可以很容易的给自己的类添加迭代器行为。定义一个 __iter__() 方法,使其返回一个带有 next() 方法的对象。如果这个类已经定义了 next(),那么 __iter__() 只需要返回self:


class Reverse:
    "Iterator for looping over a sequence backwards"
    def __init__(self, data):
        self.data = data
        self.index = len(data)
    def __iter__(self):
        return self
    def next(self):
        if self.index == 0:
            raise StopIteration
        self.index = self.index - 1
        return self.data[self.index]

>>> for char in Reverse('spam'):
...     print char
...
m
a
p
s