List
1、复制list的方法
a = [1, 2, 3, 4]
b = a
c = a[:]
|
如上代码中所示,b是a的一个引用,如果修改a,则b的值跟着改变,可以用指针的概念来理解b。而a[:]产生一个a的拷贝,因此c的值不随a的变化而变化。
2、list的extend方法和+=的区别
Lists 也可以用 + 运算符连接起来。list = list + otherlist 相当于 list.extend(otherlist)。但 + 运算符把一个新 (连接后) 的 list 作为值返回,而 extend 只修改存在的 list。也就是说,对于大型 list 来说,extend 的执行速度要快一些。
3、列表过滤的一种用法:[for v in li if func(v)]。Dictionary
1、Dictionary的key必须是不可变的(immutable),因此key的类型可以为字符串、整数和Tuple(Tuple是不可变的),List不能用做key。Tuple
1、Tuple和List的转换可以通过tuple()和list()函数来进行。
2、可以使用多变量赋值来创建返回多个值的函数,只要返回一个包含所有值的 tuple 即可。调用者可以将其视为一个 tuple,或将值赋给独立的变量。string
1、s.split()方法不带参数的话以任何的whitespace作为分隔符,包括换行符。
__builtin__
1、getattr(object, method_name), getattr函数返回object对象的一个属性(函数,方法,类等等),注意method_name为该属性名字的字符串表示。
2、dir(object)内置函数返回一个包含object对象的所有属性的一个list。
3、callable(object) -> bool,返回一个对象是否是可调用的,例如函数就是可调用的,常量是不可调用的。and or 使用技巧
1、bool and a or b类似于C语言中的bool ? a : b表达式,但前提是a必须为真,要安全使用and or的技巧,
可以这样:
理由是即使a为False,[a]也不为空,即[a]为真,所以可以放心使用。使用这个技巧可以简化代码,代替
if语句,而且在某些情况下,如lambda中,不可以使用if语句。面向对象
1、ojbect.__class__返回对象所属的类。
2、类的一些专用方法:
__setitem__ 设置数据属性
__getitem__ 获取数据属性
__repr__ 调用内置函数repr时自动调用类实例的__repr__方法
__cmp__ 比较类实例时调用该方法
__len__ 对类实例调用len函数时调用该方法
__delitem__ 对类实例调用del函数时调用该方法
3、定义私有函数或方法是通过名字而不是关键字来进行的,如果名字以__开头,但不以__结束,则该函数或方法是私有的。
4、在 Java 中,静态变量 (在 Python 中叫类属性) 和实例变量 (在 Python 中叫数据属性) 两者都是紧跟在类定义之后定义的 (一个有 static 关键字,一个没有)。在 Python 中,只有类属性可以定义在这里,数据属性定义在 __init__ 方法中。
IO操作
1、关于open第二个参数mode,一共有r, w, a, b, +, U几种,各种不同组合效果不一样,以下结果为自己测试,平台为Linux:
r 只读模式
w 只写模式,文件将会被trucated
a 添加模式 b 以二进制模式打开
r+ 读写模式,文件会被trucated
a+ 读与添加模式
w+ 与r+相同
r+w 不太明白这个,但是经过测试表明这个模式下调用write() 将会从文件开始处写入,并覆盖文件,其余部分则不变,例 如原文件为123,现在调用write('4'),则结果文件内容为 423,只是简单地覆盖了第一个字节。
r+a 测试表明与r+w相同,不知道为什么 U的作用直接贴手册里的吧: Add a 'U' to mode to open the file
for input with universal newline support. Any line ending in the input
file will be seen as a '\n' in Python. Also, a file so opened gains the
attribute 'newlines'; the value for this attribute is one of None (no
newline read yet), '\r', '\n', '\r\n' or a tuple containing all the
newline types seen. 'U' cannot be combined with 'w' or '+' mode.
|
Soundex算法
- 名字的第一个字母不变。
- 根据特定的对照表,将剩下的字母转换为数字:
- B、 F、 P 和 V 转换为 1。
- C、 G、 J、 K、 Q、 S、 X 和 Z 转换为 2。
- D 和 T 转换为 3。
- L 转换为 4。
- M 和 N 转换为 5。
- R 转换为 6。
- 所有其他字母转换为 9。
- 去除连续重复。
- 去除所有 9。
- 如果结果都少于四个字符 (第一个字母加上后面的三位字符),就以零补齐。
- 如果结果超过四个字符,丢弃掉四位之后的字符。
性能优化小结:
- 如果你要在正则表达式和编写循环间抉择,选择正则表达式。正则表达式因其是以 C 语言编译的可以本能地在你的计算机上运行,你的循环却以 Python 编写需要通过 Python 解释器运行。
- 如果你需要在正则表达式和字符串方法间抉择,选择字符串方法。它们都是以 C 编译的,所以选取简单的。
- 字典查找的通常应用很快,但是 string.maketrans 之类的特殊函数和 isalpha() 之类的字符串方法更快。如果 Python 有定制方法给你用,就使它吧!
- 别太聪明了。有时一些明显的算法是最快的。
- 不要太迷恋性能优化,性能并不是一切。
阅读(459) | 评论(0) | 转发(0) |