Chinaunix首页 | 论坛 | 博客
  • 博客访问: 58984
  • 博文数量: 30
  • 博客积分: 1211
  • 博客等级: 中尉
  • 技术积分: 280
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-16 14:14
文章分类

全部博文(30)

文章存档

2011年(1)

2010年(22)

2009年(7)

我的朋友

分类: Python/Ruby

2010-01-07 10:32:33

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的技巧,
可以这样:

(bool and [a] or [b])[0]


理由是即使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算法


  1. 名字的第一个字母不变。
  2. 根据特定的对照表,将剩下的字母转换为数字:
    • 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。
  3. 去除连续重复。
  4. 去除所有 9。
  5. 如果结果都少于四个字符 (第一个字母加上后面的三位字符),就以零补齐。
  6. 如果结果超过四个字符,丢弃掉四位之后的字符。

性能优化小结:

  • 如果你要在正则表达式和编写循环间抉择,选择正则表达式。正则表达式因其是以 C 语言编译的可以本能地在你的计算机上运行,你的循环却以 Python 编写需要通过 Python 解释器运行。
  • 如果你需要在正则表达式和字符串方法间抉择,选择字符串方法。它们都是以 C 编译的,所以选取简单的。
  • 字典查找的通常应用很快,但是 string.maketrans 之类的特殊函数和 isalpha() 之类的字符串方法更快。如果 Python 有定制方法给你用,就使它吧!
  • 别太聪明了。有时一些明显的算法是最快的。
  • 不要太迷恋性能优化,性能并不是一切。

阅读(459) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~