本章主要根据 “python manual”(在安装python后附带)中的Tutorial简化整理而来。有时间可以查看官方原来的文档。遇到模块或函数不清楚的也可以查找Manual。
内置数据类型
和大多数动态语言一样,python中的变量是动态变量,所以定义时不需要指定变量类型,只跟实际赋值时有关(python的所有变量都是对象)。
numbers(数字)
数字的使用跟数学表达式一样
>>> (50-5*6)/4 # 数学表达式
5
>>> 7/3 # 默认返回floor
2
>>> 7/-3
-3
>>> 7/3.0 # 浮点数
2.3333333333333335
变量赋值
>>> width = 20
>>> x = y = z = 10 # 变量可以同时赋值
>>> x,y = 100,200 # 多个赋值
>>> print x, y
100 200
进制转换
>>> a=100
>>> hex(a) # 十六进制
'0x64'
>>> oct(a) # 八进制
'0144'
ascii码转换
>>> ord('a') # 字母转数值
97
>>> chr(97) # 数值转字母
'a'
string(字符串)
python通过单引号、双引号或三重引号引起来的表示字符串。在这里,使用单引号和双引号完全是一样的,使用单引号做引用,字串中可以双引号字符;使用双引号,字串中可以包含单引号,否则,需要加转义字符
>>> 'doesn\'t'
"doesn't"
>>> "doesn't"
"doesn't"
>>> '"Yes," he said.'
'"Yes," he said.'
>>> "\"Yes,\" he said."
'"Yes," he said.'
>>> '"Isn\'t," she said.'
'"Isn\'t," she said.'
跨行引用,则需要和用 \n
和 \
连接字符
>>> print "Usage: thingy [OPTIONS]\n\
-h Display this usage message\n\
-H hostname Hostname to connect to"
Usage: thingy [OPTIONS]
-h Display this usage message
-H hostname Hostname to connect to
使用三重引号,"""
或 '''
,可以更方便地跨行字串
>>> print """
Usage: thingy [OPTIONS]
-h Display this usage message
-H hostname Hostname to connect to
"""
Usage: thingy [OPTIONS]
-h Display this usage message
-H hostname Hostname to connect to
原始字符串,通过在字符串前面加字母r,表示字串是raw string,不会对字串中的字符进行转义
>>> print r"""aaaaaaaa\nbbbb"""
aaaaaaaa\nbbbb
字符串可以通过+号进行连接,通过*号进行重复
>>> word = 'Help' + 'A'
>>> word
'HelpA'
>>> '<' + word*5 + '>'
'<HelpAHelpAHelpAHelpAHelpA>'
字串采用和C的一样的索引方式,下标从0开始。同时,子串可以使用分片的记法,冒号左边为开始字符的下标,右边为结束字符下标+1
>>> word[4]
'A'
>>> word[0:2]
'He'
>>> word[2:4]
'lp'
分片记法还用两个方便的默认值,左边默认为0,右边默认为整个字符串长度
>>> word[:2] # The first two characters
'He'
>>> word[2:] # Everything except the first two characters
'lpA'
分片记法,还可以使用负数下标,表示
>>> word[-1] # The last character
'A'
>>> word[-2] # The last-but-one character
'p'
>>> word[-2:] # The last two characters
'pA'
>>> word[:-2] # Everything except the last two characters
'Hel'
取子字符串时,如果超过范围,会被自动截取
>>> word[-100:200]
'HelpA'
字符串还可以步进式地截取字符。如:
>>> word[::2]
'HlA
>>> word[::-1] # 倒序输出
'ApleH'
上面主要介绍字符串的截取和拼接,字符串其他常用操作如下:
- 去左右空白字符或特殊字符
>>> " aaaa ".strip() # 去左右空白字符
aaaa
>>> " aaaa ".rstrip() # lstrip去左侧空格,rstrip去右侧空格
aaaa
>>> " aaaa,,,...".rstrip(',.!') # 去指定字符
' aaaa'
- 取字符串长度
>>> len(word)
5
- 定位字符或子串
>>> "aaabbbccc".index('bb')
3
>>> "aaabbbccc".index('bc')
5
- 比较字符串
>>> cmp('aa','bb')
-1
>>> cmp('aa','aa')
0
>>> cmp('bb','aa')
1
- 字符串大小写转换
>>> 'aaa'.upper()
'AAA'
>>> 'Aaaa'.lower()
'aaaa'
- 字符串查找
>>> 'aaabbbccc'.find('bbb')
3
index如果没找到会抛出异常,find没找到返回-1
- 字符串替换
>>> "aaabbbaaadddd".replace('a', 'e')
'eeebbbeeedddd'
>>> "aaabbbaaadddd".replace('aaa', 'e')
'ebbbedddd'
- 字符串分割
>>> "aaaaa;;bbb;;ccc;ddd;".split(';;')
['aaaaa', 'bbb', 'ccc;ddd;'] # 字符串数组
>>> "aaaaa;bbb;ccc;ddd;".split(';')
['aaaaa', 'bbb', 'ccc', 'ddd', '']
- 合并字符串
>>> ''.join(['aaaa', 'bbb', 'ccc'])
'aaaabbbccc'
>>> ';'.join(['aaaa', 'bbb', 'ccc'])
'aaaa;bbb;ccc'
python的字符串是不可修改的。如修改一个字符,应使用replace,或使用左边字串+新字符+右边字串拼接而成
list(数组)
python使用如下语法定义list,list的元素类型可以不一样
>>> a = ['spam', 'eggs', 100, 1234]
>>> a
['spam', 'eggs', 100, 1234]
list访问的分片记法与字符串相似,而且一样使用+进行连接,*
进行重复
>>> a[1:-1]
['eggs', 100]
>>> a[:2] + ['bacon', 2*2]
['spam', 'eggs', 'bacon', 4]
>>> 3*a[:3] + ['Boo!']
['spam', 'eggs', 100, 'spam', 'eggs', 100, 'spam', 'eggs', 100, 'Boo!']
与字符串不同,python的list是可以修改的
>>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> # replace some values
>>> letters[2:5] = ['C', 'D', 'E']
>>> letters
['a', 'b', 'C', 'D', 'E', 'f', 'g']
>>> # now remove them
>>> letters[2:5] = []
>>> letters
['a', 'b', 'f', 'g']
返回list大小
>>> a = ['a', 'b', 'c', 'd']
>>> len(a)
4
list可以嵌套,构造多维数组
>>> p=['a', 'b']
>>> p2=['a', p, 'b']
>>> p2
['a', ['a', 'b'], 'b']
list其他常用操作:
- append(x) 添加一个元素到末尾
- extend(x) 相当于+
- insert(i, x) 在i插入x
- remove(x) 删除x
- pop() 弹出
- index(x) 返回第一个匹配x的下标
- count(x) 返回匹配x的个数
- sort(cmp=None, key=None, reverse=False) 排序
- reverse() 生成反序数组
注意append和+的区别,append一个数组,是把数组当成一个元素添加进去,+数组是把所有元素添加进去
list还提供了一种叫做 list comprehensions
方法可以从一个list产生新的list,它参照了函数式编程中的filter-map-reduce的思想[参考第5章]
>>> l=range(10)
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> [x**2 for x in l if x%2] # 返回list中奇数的平方
[1, 9, 25, 49, 81]
tuple(元组)
tuple由多个值和逗号组成,前后可加括号,也可以不加
>>> t = 12345, 54321, 'hello!'
>>> t[0