被疏忽的一段Python语法
python提供了有序(sequence)类型(字符串,元组,列表都是有序类型),并且提供了特殊的语法来方便对这些类型进行操作,最常用的有切片操作。同一有序类型的对象之间支持”+”操作符,用来连成一个新的有序对象,有序对象也可以与一个整数进行相乘,得到一个新的有序对象。在调试的时候,我经常使用这样的语句来打印一个分割行:print ‘-‘ * 50。在对有序类型进行“*” 或者 “+”操作的时候,要千万小心。今天,我的同事就遇到了非常郁闷的问题。看下面一段代码: #coding=gbk
class Point(object):
def __init__(self, x, y):
self.x = x
self.y = y
def __repr__(self):
return '(%d, %d)' % (self.x, self.y)
itemList = [Point(-1, -1)] * 5
# 对列表元素进行赋值
for i in range(5):
itemList[i].x = i
itemList[i].y = i
print itemList
上面的代码创建一个包含5个Point对象的列表,然后在一个for循环中对列表中的每个对象的属性进行赋值。运行上面的代码,在屏幕上显示的结果是什么?是 [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)] 吗? 这段代码把我们都欺骗了。结果是:[(4, 4), (4, 4), (4, 4), (4, 4), (4, 4)]。为什么会这样呢?答案在于引用类型与值类型。[Point(-1, –1)] * 5,返回一个包含五个元素的列表,列表中的元素其实引用的是同一个对象,使用for循环在对列表进行初始化的时候,修改的其实是同一个对象的值。所以,结果就…… 一开始,我们郁闷了很长时候,谁也没意识到这个问题。在调试了许久之后才发现,哦,原来上帝在这里。只要作简单的修改,结果就会是我们想要的:
# ...
# itemList = [Point(-1, -1)] * 5
itemList = [Point(-1, -1) for i in range(5)]
# ...
相关文档:
之前学习第九章的排序小结的时候,对sort()排序方法不理解,因为括号里面带了自定义的比较函数。
后来查手册,才发现sort()里面本来就带了这样的参数。能够自定义比较方法,确实很灵活。
不仅如此,在网上查到一个博客,作者不单停留在这表面,还查究了sort()的排序算法,确实有意思。
全文抄录如下:
http://blog.done ......
4、Tuples 元组
元组和Lists相似,但它是immutable,初始化后不能改变其内容,这在程序中有时候很有用,可以用来防止定义的变量内容被意外改变。
5、Files 文件
文件操作和c语言比较接近,下面只通过代码演示:
>>> f = open('data.txt','w')
>>> ......
#!/usr/bin/env python
# -*-coding:UTF-8-*-#这一句告诉python用UTF-8编码
#=========================================================================
#
# NAME: Python MySQL test
#
# AUTHOR: benyur
# DATE : 2004-12-28
#
# COMMENT: 这是一个python连接mysql的例子
#
#================ ......
Python基本安装:
* http://www.python.org/ 官方标准Python开发包和支持环境,同时也是Python的官方网站;
* http://www.activestate.com/ 集成多个有用插件的强大非官方版本,特别是针对Windows环境有不少改进;
Python文档:
* http://www.pyth ......
Ctrl+3 行注释
Ctr+\ 去行注释
Ctrl+Shift+3 去行注释
Ctrl+4 块注释
Ctrl+5 & ......