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
本文出自 “飞翔正义的博客” 博客,请务必保留此出处http://xzq2000.blog.51cto.com/2487359/1766861
原文:http://xzq2000.blog.51cto.com/2487359/1766861