python中的一些小技巧(持续添加)

1.repr和str的区别

repr创建一个字符串,以合法的python表达式的形式来表示值

str转换为用户更易理解的形式的字符串,str是一种类型

例如 

print repr(1000L)
1000L
print str(1000L)
1000

2.input 和raw_input

input会假设用户输入的是合法的python表达式,

raw_input会把用户所有的输入当做原始的数据,即字面上的

3.None,python中Null对象

4.python中布尔值为False的对象有None,False,值为0的数,整型 浮点 长整型0,0.0+0.0j,“”,[],(),{}z

没有__nonzero__()方法的对象默认值是true

5.标准类型对象身份比较运算符 is,is not

6.python会缓存简单整数

7.Python的长整型能表达的数值仅仅与你的机器支持的虚拟内存大小有关,与编译语言的长整型概念不一样

8.对整数的除法默认为地板除,浮点数执行真正的除法,//整除运算符

9.divmod返回(商,余)coerce(num1,num2)将num1,num2转换为同一类型

10.整数进制转换hex oct bin

11.ASCII转换ord(chr) chr(num) unichr(num)

12.random模块中的randrange(start,stop,step)随即返回之间的一项,uniform()和randint()一样,不过返回的是两者之间的一个浮点数,choice()随机返回序列中的一个元素

13.“string”.translate(string.maketrans('',''),del=' ')根据给出的表转换string字符,del是过滤的字符

14.那些可以改变对象值的可变对象的方法是没有返回值的如列表

15.dict()创建字典,参数是可迭代的,那么每个可迭代的元素必须成对出现

16.hash()可以用来判断某个对象是否可以做一个字典的键,字典的键必须是可哈希的

17.字典常用方法dict.clear() get(key,default=None) has_key(key) items() keys() values() iteritems() iterkeys() itervalues() setdefault(key,default=None) update(dict2),iteritems() iterkeys() itervalues() 返回惰性赋值的迭代器,以节省内存 数据集很大的情况下

18.字典必须每个键只能对应一个项,当键存在冲突,取最近的

19.集合对象是一组无序排列的课哈希的值

20。copy()方法比调用相应的工厂函数复制对象的副本要快

21.直接迭代序列比通过索引迭代要快

22.xrange()类似range()返回一个可迭代对象,用在for循环中

21.迭代器限制:不能向后移动,不能回到开始,也不能复制一个迭代器,想再次迭代同一个对象,只能创建另一个迭代器对象

22、itertools模块提供了各种有用的迭代器

23.字典和文件是两个可迭代的Python数据类型,字典的迭代器会遍历它的键

24.在迭代可变对象的时候修改它们并不是个好主意

25.iter() 和实现__iter__() __next__()来创建迭代器

26.生成器表达式是列表解析的一个扩展,在内存使用上更有效

27.sum(),max()参数可以使生成器如:

max(len(x.strip()) for i in f)

28.sys.argv命令行参数列表,第一个元素时程序的名称

29。os中文件目录访问函数和os.path中的路径访问函数

30.永久性存储模块pickle marshal可以用来转换存储Python对象,数据的序列化。shelve功能能更完善

 

31.__init__.py中加入__all__变量导入子包时指定导入的模块472

 32.实例的__dict__仅有实例属性,没有类属性和特殊属性500

 33.类和实例都是名字空间,类是类属性的名字空间,实例则是实例属性的名字空间

34.任何对实例属性的赋值都会创建一个实例属性(如果不存在)并对其赋值。使用实例属性来改变类属性是很危险的。修改类属性应该使用类名

35.__base__类属性 包含其父类的集合的元祖

36.重写__init__不会覆盖自动调用基类的__init__ p383

37. 从标准类型中派生类

不可变类型的例子

class RoundFloat(float):

  def __new__(cls,val):

    return super(RoundFloat,cls).__new__(cls,round(val,2))

38.issubclass()判断一个类是否是另一个类的子类

39.isinstance()判断一个对象是否是另一个类的实例

40.hasattr(),getattr(),setattr(),delattr()

41.super(type[,obj]) super是一个工厂函数,它创造了一个super object,为一个给定的类使用__mro__去查找相应的父类

42.vars([obj])返回对象存储于__dict__的属性和值的字典,没有参数和locals()一样

43.实现授权关键点是覆盖__getattr__()方法,在代码中包含一个对getattr()内建函数的调用,其工作方式是当搜索一个属性时,任何局部的对象首先被找到,如果搜索失败了,则__getattr__()会被调用

44.新式类:__slots__类属性 类变量 是一个序列,有实例属性构成,任何试图创建一个不在__slots__中的名字的实例属性都将导致Attribute异常,防止用户随心所欲的添加实例属性,节约内存

45.新式类:__getattribute__()与__getattr__()的不同之处在于,当属性被访问时,它就一直可以被调用,而不限于不能找到的情况

46.描述符:表示对象属性的一个代理。描述符实际上可以是任何至少实现了三个特殊方法__get__()、__set__() __delete__()中的一个,这三个特殊方法充当描述符协议的作用。

49.property(fget=None,fset=None,fdel=None,doc=None)

50.元类 __metaclass__ 来定义某些类是如何被创建的,从根本上赋予你如何创建类的控制权。元类一般用于创建类

51.callable()确定一个对象是否可以通过函数操作符来(())调用

52.compile('code str','存放代码对象的文件的名字,通常为空串','eval/single/exec')允许在运行时刻迅速生成代码对象(字节代码预编译),然后就可以用exec 语句或内建函数eval()来执行这些对象或者对他们进行求值

53.input()相当于eval(raw_input())

...

 

 

posted @ 2012-09-06 23:32  Aveen  阅读(498)  评论(0编辑  收藏  举报
Top