python内容整理四
总结的他人的Python的学习笔记:
1. 输出重定向到日志文件:
f= open("logfilename","a")
print >> a," 输出的内容,主要要有前面的重定向号>>"
f.close() #注意关闭资源
2. 使用from __future__ import division ,使用新功能,实现真正的除法,//仍为地板除法
3. 布尔值运算支持and,or,not;&还有竖杠等,后面应该是短路运算。
4. list,tuple,map 进行 *n ,得到新的内容重复n次的相应类型。
5. decimal数字类型,需要导入相应模块,float实际上是不能够被精确表示的。
6. 元组内容不可以改变,指的是元组内容的内存地址不发生变化,但是其元素指向的地点可以变化,可以看做是只读的列表。
7. 字典有多种创建方式,其for循环是循环字典的键。
8. enumerate()分别得到序列的下标和值
9. 列表解析用法和lambda的用法,都很巧妙。
10. type(classname,bases,dict)创建一个类。
11. Strname.strip([chars])去除某些字符和符号
12. 建议使用元组方式进行多元赋值 (a,b,c)= (1,2,3)
13. swap操作 : x,y=y,x
14. sys.getrefcount(object)获得对象的引用次数,但要减1
15. 计数增加的情形有:创建,别名引用,参数传递,容器引用
16. del 从现有的名字空间删除一个别名,引用-1
17. 给从其他模块引入的常用的变量重新赋予一个本地别名,这样可以加快加载速度。
18. 用户如果创建的实例定义了nonzero(__nonzero__())或者length(__len__())且值为0,返回False,档判断对象的bool值时,先调用nonzero方法,没有的话调用length()方法,并返回长度作为bool值。
19. 通过cpmpile()内建函数来进行预编译,使用exec()或eval()方法来执行。
20. 使用一个slice()可以创建一个切片对象,np里面也有相应的用法。
21. 比较,字符串是从首字母开始比较和长度无关,列表,元组以及字典也是按照元素顺序比较,字典是键的比较
22. 自定义对象的比较是 id的比较
23. cmp()/__cmp__(),str()/__str__(),repr()/__repr__(),isinstance()
24. 类型工厂函数:int(),long(),float(),complex(),type(),str(),Unicode(),basastring(),dict(),list(),tuple(),set(),frozenset(),bool(),object(),classmethod(),staticmethod(),super(),property(),file()
25. 标准整数类型: 0X代表十六进制,0代表八进制,0b代表二进制,长整型后面加L,大小和内存相关。
26. 解释器启动参数Qdivision_style或者-Qnew或者引入新特性使用真正除法
27. **幂运算符比左侧单目运算符优先级高。
28. coerce(n1,n2)得到按照类型转换规则转换得到的两个数字组成的元组。
29. divmod(n1,n2)得到由商和余数组成的元组。
30. round(num[,base])四舍五入,base指定小数点位数;floor()获得不大于原数的最大整数;和int()差不多
31. random伪随机数生成器,randint(start,end)获得之间的一个整数,uniform(start,end)随机生成范围内一个浮点数,randrange([start,]stop[,step])随机返回一个区间内按步长得到范围的一个随机数,choice(sequence)随机返回给定序列里面的一个元素。
32. 对所有的序列都适用的操作符,包括列表,元组和字符串:in,not in,+,*,[],slice
33. list.extend(iterable)追加一个可迭代对象。list.insert(index,obj)index超出下标后,在末尾增加,如果是负数超出在开头加。
34. list[iter],tuple([]),ste(object)是把对象转换成对象的字符串表示法,basestring不能被实例化,作为str和Unicode的父类使用。
35. reversed(sequence)返回逆序访问的迭代器
36. zip返回一个包含元组的列表
37. lambda函数,可以使用句柄加参数的方式进行调用。
38. for-else用法,else子句会在所有的元素循环完执行,如果break则不执行。
39. 使用join连接两个字符串效率会更高。
40. 格式化操作符辅助指令:*定义宽度或小数点精度,-用于左对齐,+在正数前面加+号,(sp)在正数前面显示空格,#显示进制比如%#X,(var)映射变量(字典参数),m.n 中m指显示的最小总宽度,n是小数点后的位数
41. 格式化字符串接受dict数据: “%(howmany)d days” % {"howmany":28}
42. ‘%06.2f’ % 1.235 前面加0,表示不足6位时在前面加0补充,‘%(name)s:%(score)06.1f’ %{'score':9.5, 'name':'newsim'},'%*.*f' % (6, 2, 2.345)就相当于'%6.2f' % 2.345
43. 几种格式化输出的方法进行总结:前两种就是上面介绍的使用元组和字典进行格式化的,下面介绍几种其他的形式:
template = 'hello {0},your message is {1}'.format('apache','tomcat')
template = 'hello {name},your message is {message}'.format(name='apache',message='tomcat')因为元组中不能出现=,所以严格来说不是个元组,更像是字典的未创建形式。
上面这两种是使用了{}来对元组的下标或者是字典的键来访问.
>>> print ('slice'.center(20,'-'))
-------slice-------- 好玩的方法,华丽的分割
str.format(*args)后面是可以加多元素的,经过封包得到元组,里面使用{}进行访问。
format(1.00212,".2f")格式化方法
print
(
"{0:-10.3f},{1:010.1f}"
.
format
(
1.12312312
,
1.12312312
))
print
(
"{0:X},{1:o},{2:b}"
.
format
(
16
,
16
,
16
))
这个格式化的方法,在{}里写明格式化要求{0:-10.3f}表示后面格式要求。
print
(
"what {1:10} world ! {0:10} a"
.
format
(
"apache"
,
"beauty"
))
print
(
"what {1:>10} world ! {0:<10} a"
.
format
(
"apache"
,
"beauty"
))
tempTemplate
=
string.Template(
"Hello $name ,your message is $message"
)
print
(tempTemplate.substitute(
locals
()))
print
(tempTemplate.substitute(
vars
()))
44. char(num),nuichr(num),ord(string),前两个分别用来把一个数字转化成一个对应类型的字符串,ord则是一个string类型的单字符对象转化成为对应的ascii码或Unicode码。
45. string模板的一些方法: string.index(),string.find(),但是index方法找不到时会返回一个异常。返回的是下标,find如果没有找到返回-1.他们都只返回以一个找到的字符。rindex,rfind从右边找。
>>> s="abc"
>>> s.index("d")
Traceback (most recent call last):
File "<pyshell#30>", line 1, in <module>
s.index("d")
ValueError: substring not found
>>> s.index("a")
0
>>> s.find("d")
-1
46. string.join(sequence[,str])这个方法比较有用,如果只有一个参数,将序列里面的元素连接为字符串,如果有则用第二个参数去插入到每个元素中间进行分割,如果两个参数都是字符串,就是一个连接字符串的函数。
47.
>>> string.ljust("zzz",4,"m")
'zzzm'
>>> string.ljust("zzz",4,"")
Traceback (most recent call last):
File "<pyshell#47>", line 1, in <module>
string.ljust("zzz",4,"")
File "C:\Python27\lib\string.py", line 431, in ljust
return s.ljust(width, *args)
TypeError: must be char, not str
>>> string.ljust("zzz",4)
'zzz '
总体来说是一个补充函数,用指定的字符(只能是字符,或者为空)去填充指定长度的字符串,也可以使用string.rjust()右对齐。
48. string.lower(),string.upper(),string.swapcase()
49. string.split(string,sub,count)count指返回的个数:
>>> string.split(s,',',2) 这个count并不是指返回的元素数,而是指给出的分割符的数量
['niu', 'qi', 'ke']
>>> string.split(s,',',1) 元素总是比count多一个
['niu', 'qi,ke']
>>> s.split(',') 比较简单的使用实例调用的方法,这里是绑定的,以上是非绑
['niu', 'qi', 'ke'] 定的,所以要传入self
>>>
50. string.replace(string,old,new[,number=string.count(string,old)])替换,最多替换不超过number数量,默认的是old字符串在原字符串的个数。
51. Unicode.encode()按照指定方式编码字符串,Decode反之。
52. list中,del a[index], a.append(),a.remove(value)没有就报错,a.pop()默认删除并返回列表最后一个元素,也可以指定index,如果超出就报错。
53. sorted()reserved()进行排序,enumerate函数
54. zip()函数,神奇的函数。配合*使用很好,for i,j,k in zip(list1,list2,list3)也可以这样进行使用。
55. 处理一组数据的时候比如1,2,3其实是默认了一个元组(1,2,3)
56. 函数可以返回多个对象,其实返回的也是元组,这句话颇有含义,Python的机制决定,其实圆括号不是必须的,所有的以逗号分隔的一般都会被认为是元组,除了一些特殊情况
57. tell()和seek()类似是游标的位置
58. map()函数的用法,将第二个参数的每个元素作用于一个函数上面并返回值组成一个新的列表。
59. dict.keys(),dict.values(),dict.items(),前两个得到键或者是值的列表,后面获得键值对元组的列表。
60. 字典创建的几种方式:dict={‘name’:“”,‘age’:35}
dict=dict([(key,value),(key,value)])使用键值对元组或列表组成的列表或者是元组进行创建
>>> d=dict([['name',"niuqike"],['age',23]])
>>> d
{'age': 23, 'name': 'niuqike'}
>>> d=dict([('name',"niuqike"),['age',23]])
>>> d
{'age': 23, 'name': 'niuqike'}
>>>
>>> d={'name':"niuqk",'age':23}
>>> d
{'age': 23, 'name': 'niuqk'}
>>> d={'name'="niuqk",'age'=23}
SyntaxError: invalid syntax 这种有语法错误
>>>
>>> d=dict(name="niuqk",age=23) 这个才是用等号创建的正确方式(用关键字创建方式),注意这里使用了工厂函数,而不是花括号,另外这里的键没有加引号。
>>> d
{'age': 23, 'name': 'niuqk'}
键最好采用不可变的元素,所以在定义的时候一般键都是有引号的。
dict.fromkeys(sequence_keys,default_value)
61. 成员判断使用 in 或者 not in
62. dict()更新操作如果后面的键重复则更新,如果不重复就是追加。另外,后面也可以是元素包含两个部分的列表或元组,自动惊醒解析。
>>> f={'aaa':100}
>>> d.update(f)
>>> d
{'age': 23, 'aaa': 100, 'name': 'niuqk'}
>>>
63. 删除: del dict["name"], dict.clear() , dict.pop("name")
64. 映射类的比较:首先比较字典的长度,然后比较键的大小,最后比值,之前是不是有个地方写错了。这里是正确的。
65. dict.copy()这里也是浅拷贝
66. hash()哈希函数可以用来判断一个对象是否可以做一个字典的键,会返回它的哈希值,如果不可哈希则返回一个typeerror错误
67. sorted(dict)这个是返回键排序后的键值对,但字典本身是无序的,通过键查找的速度更快
68. dict.get(key,default=none)返回键为key的值,如果指定了default,没有这个键的时候返回默认值。
69. setdefault(key,default=none)如果字典中不存在key,则用default为key赋值。
70. 除了使用dict.keys(),dict.values(),dict.items()等进行循环外,还可以使用dict.iterkeys(),dict.itervalues(),dict.iteritems()进行惰性循环。
71. 所有不变对象都是可哈希的,如果可变对象实现了__hash__(),那么就可以作为键使用。
72. 分为set 和 frozenset,集合里面没有重复元素,如果重复就不再插入,是无序的。
73. 集合实现了很多数学上集合的功能
74. 集合只能通过工厂函数set()和frozenset()来创建
75. set的更新操作,forzenset()不可变。set.add(),s.update()接受一个序列参数,将该序列中集合里面没有的元素加入集合。s.remove()从set中移除一个元素。
76. 集合操作的时候最后产生的是可变或者不可变集合取决于第一个集合的性质。
77. and是会考虑后面因素,不是短路的。
78. 三元操作 tdo if true else fdo
79. filter(function,sequence)函数,对于序列每一个元素应用函数,如果返回的是FALSE,此元素将被从返回的列表中去掉。
80. 生成表达式在被用来作为参数的时候,不需要圆括号。
81. 文件只是连续的字节序列,其实模板,函数等等也是一个代码字节的序列而已。
82. file内容:open(name,mode='r',buffering=-1),用r打开的文件必须存在,使用w方式如果文件存在就要先清空,a直接进行追加,+表示可读可写。