Python isinstance判断对象类型
{
//TODO
}
在Python中只需要使用内置的函数isinstance,使用起来非常简单,比如 下面的例子:
pass
A = objA()
B = ‘a’,'v’
C = ‘a string’
print isinstance(A, objA)
print isinstance(B, tuple)
print isinstance(C, basestring)
输出结果:
True
True
True
在Python中只需要使用内置的函数isinstance,使用起来非常简单,比如 下面的例子:
输出结果:
True
True
True
比如:
import linecache
print linecache.getline(‘2.1_open.py‘, 4)将返回我上一 节事例代码文件2.1_open.py的第4行文字,输出结果:
f = open(’/home/evergreen/桌面/test’)
查 看linecache中的实现(我用的是Ulipad,所以直接将光标停留在linecache处,按F6键
只是粗略的知道yield可以用来为一个函数返回值塞数据,比如下面的例子:
取出alist的每一项,然后把i + 1塞进去。然后通过调用取出每一项:
这的确是yield应用的一个例子,但是,看过limodou的文章《2.5版yield之学习心得》,并自己反复体验后,对yield有了一个全新的理解。
假如你看到某个函数包含了yield,这意味着这个函数已经是一个Generator,它的执行会和其他普 通的函数有很多不同。比如下面的简单的函数:
可以看到,调用h()之后,print 语句并没有执行!这就是yield,那么,如何让print 语句执行呢?这就是后面要讨论的问题,通过后面的讨论和学习,就会明白yield的工作原理了。
Python2.5以前,yield是一个语句,但现在2.5中,yield是一个表达式 (Expression),比如:
表达式(yield 5)的返回值将赋值给m,所以,认为 m = 5 是错误的。那么如何获取(yield 5)的返回值呢?需要用到后面要介绍的send(msg)方法。
现在,我们来揭晓yield的工作原理。我们知道,我们上面的h()被调用后并没有执行,因为它有 yield表达式,因此,我们通过next()语句让它执行。next()语句将恢复Generator执行,并直到下一个yield表达式处。比如:
c.next() 调用后,h()开始执行,直到遇到yield 5,因此输出结果:
Wen Chuan
当我们再次调用c.next()时,会继续执行,直 到找到下一个yield表达式。由于后面没有yield了,因此会拋出异常:
了解了next()如何让包含yield的函数执行后,我们再来看另外一个非常重要的函数 send(msg)。其实next()和send()在一定意义上作用是相似的,区别是send()可以传递yield表达式的值进去,而next()不 能传递特定的值,只能传递None进去。因此,我们可以看做
c.next() 和 c.send(None) 作用是一样的。
来看这个例 子:
输 出的结果为:
Wen Chuan Fighting!
需要提醒的是,第一次调用时,请使用next()语句或是send(None),不 能使用send发送一个非None的值,否则会出错的,因为没有yield语句来接收这个值。
send(msg) 和 next()是有返回值的,它们的返回值很特殊,返回的是下一个yield表达式的参数。比如yield 5,则返回 5 。到这里,是不是明白了一些什么东西?本文第一个例子中,通过for i in alist 遍历 Generator,其实是每次都调用了alist.Next(),而每次alist.Next()的返回值正是yield的参数,即我们开始认为被压进 去的东东。我们再延续上面的例子:
输出结果:
Wen Chuan Fighting!
We will never forget the date 5 . 12
中断Generator是一个非常灵活的技巧,可以通过throw 抛出一个GeneratorExit异常来终止Generator。Close()方法作用是一样的,其实内部它是调用了 throw(GeneratorExit)的。我们看:
因 此,当我们调用了close()方法后,再调用next()或是send(msg)的话会抛出一个异常:
注:以上观点属于本人的个人理解,如有偏差请批评指正。谢谢!
比如下面的例子:
上面的例子中,在赋值书的value属性时,偷偷的将value减去了100,呵。输出结果:
Python
0
Python cost : 0
Type is not found!
一、服务端(Server.py)
服务端要做的事情是:
1. 创建一个Socket对象
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)2. 绑定一个端口
s.bind((“”, 8081))3. 接受来自客户端的消息
while True:
# Receive up to 1,024 bytes in a datagram
data, addr = s.recvfrom(1024)
print “Received:“, data, “from“, addr二、 客户端(Client.py)
客户端要做的事情是:
1. 创建一个Socket对象。
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)2. 向某个服务器的指定的端口发送消息。由于使用UDP,如果服务器端未接收到将会丢弃数据包。
port = 8081
host = “localhost“
while True:
msg = raw_input()
s.sendto(msg, (host, port))三、运行试试

一、打开一个网页获取所有的内容
二、获取Http头
三、使用代理
1. 查看环境变量
2. 设置环境变量
3. 使用代理
Python中初始化一个5 x 3每项为0的数组,最好方法是:
我 们知道,为了初始化一个一维数组,我们可以这样做:
没错,那我们初始化一个 二维数组时,是否可以这样做呢:
其 实,这样做是不对的,因为[0] * 5是一个一维数组的对象,* 3的话只是把对象的引用复制了3次,比如,我修改multi[0][0]:
输 出的结果将是:
[['Love China', 0, 0, 0, 0], ['Love China', 0, 0, 0, 0], ['Love China', 0, 0, 0, 0]]
我们修改了multi[0][0],却把我们的multi[1] [0],multi[2][0]也修改了。这不是我们想要的结果。
如果我们这样写呢:
我们看输出结果:
[['Love China', 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
恩,没问题。但是,由于使用 * 的方法比较容易引起混淆导致Bug,所以还是推荐使用上面第一种方法,即:
一、打开一个网页获取所有的内容
二、获取Http头
三、使用代理
1. 查看环境变量
2. 设置环境变量
3. 使用代理
使用open打开文件后一定要记得调用文件对象的close()方法。比如可以用try/finally语句来确保最后能 关闭文件。
file_object = open(‘thefile.txt‘)
try:
all_the_text = file_object.read( )
finally:
file_object.close( )注:不能把open语句放在try块里, 因为当打开文件出现异常时,文件对象file_object无法执行close()方法。
input = open(‘data‘, ‘r‘)
#第二个参数默认为r
input = open(‘data‘)
input = open(‘data‘, ‘rb‘)
file_object = open(‘thefile.txt‘)
try:
all_the_text = file_object.read( )
finally:
file_object.close( )
file_object = open(‘abinfile‘, ‘rb‘)
try:
while True:
chunk = file_object.read(100)
if not chunk:
break
do_something_with(chunk)
finally:
file_object.close( )
list_of_all_the_lines = file_object.readlines( )如果文件是文本文件,还可以直接遍历文件对象获取每行:
for line in file_object:
process line
output = open(‘data‘, ‘w‘)
output = open(‘data‘, ‘wb‘)
output = open(‘data‘, ‘w+‘)
file_object = open(‘thefile.txt‘, ‘w‘)
file_object.write(all_the_text)
file_object.close( )
file_object.writelines(list_of_text_strings)注 意,调用writelines写入多行在性能上会比使用write一次性写入要高。
join 方法用于连接字符串数组
输出结果:
abcd
a-b-c-d
使用 % 连接多个变量
输出结果:
hello python 1 ['a', 'b', 'c', 'd']