第一章快速改造:基础知识
1.2交互式解释器
在IDLE编辑器,在提示符后输入help然后按回车;也可以按下F1获得有关IDLE的帮助信息
1.4数字和表达式
1/2返回0,整除除法;1.0/2返回0.5,用一个或者多个包含小数点的数字参与计算。另外改变除法的执行方式:from_future_import division
//可以实现整除,1.0//2.0返回0.0
%取余数;**幂运算;
>>> 1/2
>>> 1.0/2
0.5
>>> 1.0//2.0
0.0
>>> 10%3
1
>>> 9**(1/2)
1
>>> 9**(1.0/2)
3.0
>>> 2.75%0.5
0.25
>>> -9%4
3
>>> -3%2
1
>>> -3/2
-2
1.4.1长整数
普通整数不能大于2147483647也不能小于-2147483648,若更大的数,可以使用长整数。长整数结尾有个L,理论上小写也可以,不过为了便于识别,尽可能用大写。
1.4.2十六进制和八进制
0XAF返回175 ,十六进制;
010返回8,八进制
>>> 0xAF
175
>>> 010
8
1.5变量
包含字母、数字和下划线。首字母不能是数字开头。
1.8函数
Pow计算乘方:pow(2,3),2**3均返回8;pow等标准函数称为内建函数。
Abs(-10)求绝对值,返回10;round(1.0/2.0)返回1.0,把浮点数四舍五入为最接近的整数值。
>>> pow(2,3)
8
>>> 2**3
8
>>> abs(-10)
10
>>> round(1.0/2.0)
1.0
>>> round(8.06,2)
8.06
>>> round(8.06,1)
8.1
1.9模块import
>>> import math
>>> math.floor(8.8) 向下取整
8.0
>>> math.ceil(8.8)向上取整
9.0
>>> int(math.ceil(32.1))
33
>>> int(32.9)
32
>>> flo=math.floor
>>> flo(33.9)
33.0
使用了from 模块import 函数,这种方式的import命令之后,就可以直接使用函数,而不需要使用模块名最为前缀了。但是要注意在不同模块引用,可能导致函数冲突。
>>> from math import sqrt
>>> sqrt(9)
3.0
>>>
1.9.1 cmath和复数nan- not a number返回的结果
Cmath即complex math复数模块
>>> import cmath
>>> cmath.sqrt(-1)
1j
返回的1j是个虚数,虚数以j结尾;这里没有使用from cmath import sqrt,避免与math 的sqrt冲突。
1.10.3注释符号:#
1.11字符串,使用”\”可以进行转义。
1.11.2拼接字符串
>>> 'Hello, ' 'World'
'Hello, World'
>>> 'Hello,' 'World'
'Hello,World'
>>> 'Hello, '+'World'
'Hello, World'
>>> 'Hello, '+5
Traceback (most recent call last):
File "
'Hello, '+5
TypeError: cannot concatenate 'str' and 'int' objects
>>>
需要保证两边是一样的字符串,而有其他格式要报错的
1.11.3字符串表示str和repr- 两个均为函数,事实上str是一种类型Str会将值转换为合理形式的字符串。另外一种是通过repr函数,创建一个字符串。
Repr(x)也可以写作`x`实现(注意:`是反引号),python3.0中已经不适用反引号了
>>> print 'hello,world'
hello,world
>>> print repr('hello,world')
'hello,world'
>>> print str('hello,world')
hello,world
>>> print 1000L
1000
>>> 1000L
1000L
>>> print repr(1000L)
1000L
>>> print str(1000L)
1000
>>> tmp=42
>>> print 'The number is:'+tmp
Traceback (most recent call last):
File "
print 'The number is:'+tmp
TypeError: cannot concatenate 'str' and 'int' objects >>> print 'The number is:'+`tmp`
The number is:42
>>> print 'The number is:'+str(tmp)
The number is:42
>>> print 'The number is:'+repr(tmp)
The number is:42
1.11.4 input和raw_input的比较
>>> name=input("What's your name:") What's your name:Gumby
Traceback (most recent call last):
File "
name=input("What's your name:") File "
后面输入的字符串增加了引号不报错。>>> input('Enter a number:')
Enter a number:3
3
>>> name=input("What's your name:") What's your name:'Gumby'
>>> raw_input("What's your name:") What's your name:Gumby
'Gumby'
>>> raw_input("What's your name:") What's your name:Gumby
'Gumby'
>>> raw_input('Enter a number:')
Enter a number:3
'3'
>>>
1.11.5长字符串、原始字符串和unicode
(1)长字符串使用三引号;转义的反斜杠用于行尾
>>> print 'hello, \
world!'
hello, world!
>>> print '''hello,
world!'''
hello,
world!
>>> 1+2+3\
+4
10
(2)原始字符串,对于反斜线并不会特殊对待,以r开头,注意字符串尾部
>>> print 'c:\nowhere'
c:
owhere
>>> print r 'c:\nowhere'
SyntaxError: invalid syntax
>>> print 'c:\nowhere'
c:
owhere
>>> print r'c:\nowhere'
c:\nowhere
>>> print r"This is illegal\"
SyntaxError: EOL while scanning string literal >>> print r"This is illegal\\"
This is illegal\\
>>> print r"This is illegal" "\\"
This is illegal\
(3)Unicode在字符串前增加前缀U
>>> print u'hello, world'
hello, world
第二章列表和元组
序列中的每个元素被分配一个序号-- 即元素的位置,也被称为索引。第一个索引为‘0’,最后一个元素可以使用-1标记
2.1序列概览
Python包含6中内建的序列:列表,元组,字符串,unicode字符串,buffer对象和xrange对象。
列表和元组的主要区别:列表可以修改,元组则不能。内建函数返回元组。几乎所有情况下都可以使用列表代替元组。特殊情况之一:使用元组作为字典的键,因为键不可以更改,所以不能用列表。
列表的各个元素通过逗号进行分隔,写在方括号内。
>>> edward=['Edward Gumy',42]
>>> john=['John Smith',50]
>>> database=[edward,john]
>>> database
[['Edward Gumy', 42], ['John Smith', 50]]
>>>
2.2通用序列操作
包括:索引,分片,加,乘以及检查某个元素是否属于序列的成员,除此之外还有计算长度,找出最大元素和最小元素的内建函数。
迭代:依次对序列中的每个元素重复执行某些操作。
2.2.1索引
从0开始,最后一个元素可以使用-1.索引访问的单个元素
>>> greeting="Hello"
>>> greeting[0]
'H'
>>> greeting[-1]
'o'
>>> four=raw_input('Year:')[3]
Year:2005
>>> four
'5'
2.2.2分片
冒号:第一个元素包含在分片内,第二个元素不包含在分片内,是分片之后剩余部分的第一个元素编号。
>>> num=[1,2,3,4,5,6,7,8,9,10]
>>> num[3:6]
[4, 5, 6]
>>> num[0:1]
[1]
>>> num[7:10] #索引10指向第11个元素,这个元素不存在。[8, 9, 10]
>>> num[-3:-1]
[8, 9]
>>> num[-3:0]
[]
>>> num[-3:]
[8, 9, 10]
>>> num[7:]
[8, 9, 10]
>>> num[:3]
[1, 2, 3]
>>> num[:] #复制整个序列
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> num[0:10:2]
[1, 3, 5, 7, 9] >>> num[3:6:3] [4]
>>> num[::4] [1, 5, 9]
>>> num[8:3:-1] [9, 8, 7, 6, 5] >>> num[10:0:-2] [10, 8, 6, 4, 2] >>> num[0:10:-2] []
>>> num[::-2] [10, 8, 6, 4, 2] >>> num[5:0:-2] [6, 4, 2]
>>> num[:5:-2] [10, 8]
>>> num[5::-2] [6, 4, 2]
>>>
2.2.3序列相加
两种相同类型的序列才能进行链接操作
>>> [1,2,3]+[4,5,6]
[1, 2, 3, 4, 5, 6]
>>> 'hello, '+'world'
'hello, world'
>>> 'hello, '+[1,2]
Traceback (most recent call last):
File "
'hello, '+[1,2]
TypeError: cannot concatenate 'str' and 'list' objects >>>
2.2.4乘法
数字X乘以一个序列会生成新的序列,原序列被重复X次
>>> 'PH'*3
'PHPHPH'
>>> [42]*3
[42, 42, 42]
>>> [1,2]*3
[1, 2, 1, 2, 1, 2]
>>> []
[]
>>> [none]*3 #注意N需要大写,不然报错。None是一个内建值,它的含义是“什么也没有”
Traceback (most recent call last):
File "
[none]*3
NameError: name 'none' is not defined
>>> [None]*3
[None, None, None]
>>>
2.2.5成员资格in
检查一个值是否在一个序列中。条件为真返回True,条件未假返回False
>>> pw="abc"
>>> 'a' in pw
True
>>> 'x' in pw
False
>>> database=[['John',42],['Smith',36]]
>>> ['john',42] in database # 大小写,要注意
False
>>> ['John',42] in database
True
>>> num=[1,2,3,4,5]
>>> [1,2] in num
False
>>> [1] in num
False
>>> 1 in num
True
2.2.6 长度、最小值和最大值内建函数len、min和max >>> num=[1,8,3]
>>> len(num)
3
>>> max(num)
8
>>> min(num)
1
>>> max(2,3)
3
max 跟min的参数并不一定是序列,而是以多个数字直接作为参数。>>> exm=['h',12,'e',2]
>>> max(exm)
'h'
>>> exm=[12,'e',2,'h']
>>> max(exm)
'h'
>>> max(['A',1,'1','a','z'])
'z'
这个有点意思了,需要以后注意查查,是根据ascii进行提取的吗?
2.3 列表:Python的“苦力”
讨论列表不同于元组跟字符串的地方
2.3.1 list函数
>>> ls=list("Hello")
>>> ls
['H', 'e', 'l', 'l', 'o']
>>> ''.join(ls)
'Hello'
>>>
2.3.2 基本的列表操作
列表可以使用所有适用于序列的操作。而列表是可以修正的。本节介绍可以改变列表的方法:元素赋值、元素删除、分片赋值以及列表方法(请注意,并非所有的列表方法都真正地改变列表)
1、改变列表:元素赋值
>>> x=[1,1,1]
>>> x[1]=2
>>> x
[1, 2, 1]
注意:不能为一个位置不存在的元素进行赋值。
2、删除元素del
>>> num=[1,2,3,4]
>>> del num[2]
>>> num
[1, 2, 4]