字符串
字符串方法
find()方法
join()方法:join方法与split()方法相逆,用来在队列中添加元素。
1
2
3
4
5seq=['1','2','3','4','5']
sep='+'
sep.join(seq)
#-----output:-------
1+5+5+7lower():返回字符串中的小写字母版
replace():返回某字符串的所有匹配项均被替换之后的字符串
1
2
3print 'This is a string'.replace('is','ezz')
#------output:------
Thezz ezz a stringsplit()方法:join逆方法。将字符串分隔成序列
1
2
3print '1+2+3+4+5'.split('+')
#-------output:-----------
['1', '2', '3', '4', '5']strip()方法:返回去除掉两侧空格的字符串
1
2
3print ' International '.strip()
#-------output:------------
International
字典
创建字典
字典可以通过一下方式创建:
phonebook={'Alice':'2341','Beth':'9102','Cecil':'3258'}
dict函数
dict函数可以通过其他映射或者这样的序列建立字典。
1 | items={('Ruby','56'),('python','89')} |
dict也可以直接创建字典,例如
1 | d = dict(Ruby='56',python='89') |
字典方法
clear():清楚字典中的所有项。
copy()方法:
1
2
3
4
5
6
7x={'username':'admin','machines':['foo','bar','baz']}
y=x.copy()
y['username']='wyc'
y['machines'].remove('foo')
print y
#--------output:-------
{'username': 'wyc', 'machines': ['bar', 'baz']}fromkeys():用给定的键建立新的字典,每个键值对应的值为None
1
2
3print {}.fromkeys(['name','age'])
#------output:-----------
{'age': None, 'name': None}get()方法:一般来说,访问字典中不存在的键值时会报错,而使用get(‘key’)时,如果不存在会返回一个None
循环
循环中的一些迭代方法
- 并行迭代:zip(seq1,seq2)函数
1 | names=['anne','jane','geogre','damon'] |
异常
一些常见的内建异常
1 | Exception #所有异常的基类 |
捕获异常时访问异常对象本身
如果希望在except子句中访问异常对象本身,可以使用两个参数。比如,如果想让程序继续运行,又因为某种原因想记录下错误,如下功能就很有用。如下的示例程序会打印异常,但是程序会继续运行。
1 | try: |
Finally子句
Finally子句用来在可能的异常后进行清理工作。它和try子句联合使用:
1 | x = None |
必须要说明的是,在一个try语句中,不能同时使用except和finally子句——但是一个子句可以放在另一个子句中。
类和类型
类特性的私有化
Python并不直接支持私有方式,但是可以使用一些小技巧达到私有化的效果。
为了让方法或者特性变为私有(从类的外部无法访问),只要在它的名字前面加上双下划线即可;
尽管如此,在类的外部还是可以通过某种方法来访问这些类的私有方法的,尽管不这么做。。。
1 | print '\n-----------类的成员函数私有化------------' |
魔法方法、属性和迭代器
Python中,有的名称会在前后都加两个下划线,这种写法很特别。这些名字组成的集合所包含的方法称为魔法方法。
1 | # 为了保证类是新型的,应该把赋值语句 |
构造方法
构造方法与其他普通方法的不同之处在于,当创建一个对象时,构造方法会被立即调用。
1 | class FooBar: |
super()函数
考虑有如下的类:
1 | class Bird: |
SongBird类中没有hungry特性。
原因是:子类在构造时,构造方法被重写,新的构造方法并未对父类的构造方法进行初始化。
可以采用super()函数解决这种问题:super()函数的位置在子类构造函数的第一行。如下程序所示:
1 | class Bird: |
模块探究
不可能介绍所有的模块,当见到一个新的模块(module)时,要学会自己分析它。
使用模块之前,首先得导入模块:假设有一个模块copy
1 | import copy |
导入时没有报告异常,说明该包存在且可用。
dir
使用dir函数可以查看模块中包含的内容,它会将对象的所有特性列出。
运行
1 | print dir(copy) |
其中一些名字以下划线结束——暗示其并不是为在模块外部使用而准备的。这儿用列表推倒式过滤掉这样的特性:
1 | print [n for n in dir(copy) if not n.startswith('_')] |
__all__
变量
在完整的dir(copy)列表中,有一个__all__
变量名字。该变量包含一个列表,列表与之前推导过的列表比较类似:
1 | print copy.__all__ |
__all__
对应的列表定义了模块的公有接口。更准确的说,如果使用以下代码:from copy import * ,那么,只能以这种方式导入__all__
列表中的四个属性。如果要导入PyStringMap的话,就得显示地实现,或者导入copy然后使用copy.PyStringMap,或者使用from copy import PyStringMap的方式导入。
### 用help获取帮助
help能够对导入的包使用提供帮助。
1 | print help(copy.copy) |
从帮助信息可知,copy带有一个参数x,是浅复制操作。提到了模块的__doc__
字符串。事实上,帮助文档就是从文档字符串中取出来的。
1 | print copy.copy.__doc__ |
文档
例如需要知道range函数的参数时什么,则只需要这样:
1 | print range.__doc__ |
查看和使用源代码
如果想要知道某个函数的源代码,则需要调用__file__
属性即可调出源代码的路径。
1 | print copy.__file__ |