第一章 Python变量和数据类型
1-1 Python中的数据类型
一、整数
Python可以处理任意大小的整数,当然包括负整数。
①普通整数:写法一样,例如:1,100,-8080,0。
②十六进制:用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等。
二、浮点数
①普通浮点数:直接用数学写法,如1.23,3.14,-9.01,等等。
②科学计数法:把10用e替代,即:1.23x10^9记为1.23e9或12.3e8,0.000012可以写成1.2e-5
注:整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。
三、字符串
①字符串是以''或""括起来的任意文本。
比如'abc',"xyz"等等。字符串'abc'只有a,b,c这3个字符。
四、布尔值
①在Python中,可以直接用True、False表示布尔值(请注意大小写)
②通过布尔运算计算出来。
③布尔值可以用and、or和not运算。
and运算是与运算,只有所有都为 True,and运算结果才是 True。
or运算是或运算,只要其中有一个为 True,or 运算结果就是 True。
not运算是非运算,它是一个单目运算符,把 True 变成 False,False 变成 True。
五、空值
空值是Python里一个特殊的值,用None表示。
None不能理解为0,因为0是有意义的,而None是一个特殊的空值。
1-2:print输出
①print语句可以向屏幕上输出指定的文字。比如输出'hello, world'
②print语句也可以跟上多个字符串,用逗号“,”隔开,遇到逗号“,”会输出一个空格,这样就可以连成一串输出:
③print也可以打印整数,或者计算结果
1-3 变量
①变量不仅可以是数字,还可以是任意数据类型。
②变量名必须是大小写英文、数字和下划线(_)的组合,且不能用数字开头
③在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量(动态语言)。
1-4 字符串
如果字符串包含",我们就可以用' '括起来表示
对字符串的某些特殊字符进行“转义”,Python字符串用\进行转义:
\’表示‘
\”表示 ”
\n 表示换行
\t 表示一个制表符
\\ 表示 \ 字符本身
1-5 输出字符串
①若一个字符串包含很多需要转义的字符,在字符串前面加个前缀 r ,表示这是一个 raw 字符串,里面的字符就不需要转义了
②表示多行字符串,可以用'''...'''表示
③用r'''...'''把多行字符串变成raw字符串
④输出中文:在第一行添加注释:# -*- coding: utf-8 -*-,然后输出时用u'...',其余同上
1-6 整数与浮点数的运算
整数运算结果仍然是整数,浮点数运算结果仍然是浮点数,但是整数和浮点数混合运算的结果就变成浮点数了。
1-7 布尔运算
and 和 or 运算的一条重要法则:短路计算。
① 在计算 a and b 时,如果 a 是 False,则根据与运算法则,整个结果必定为 False,因此返回 a;如果 a 是 True,则整个计算结果必定取决与 b,因此返回 b。
②在计算 a or b 时,如果 a 是 True,则根据或运算法则,整个计算结果必定为 True,因此返回 a;如果 a 是 False,则整个计算结果必定取决于 b,因此返回 b。
第二章 List、tuple、dict、set
dict查找速度快,但占用内存大;list随着元素的增多查找速度逐渐下降,但占用内存小
List:有序,可变
Tuple:有序,不可变
Dict:无序,key不能重复、不可变(所以list就不能作为key)
Set:无序,元素不重复、不可修改但可以增加和删除
2-1 List
list是一种有序的集合,元素顺序排列,可以随时添加和删除其中的元素。list中包含的元素并不要求都必须是同一种数据类型,我们完全可以在list中包含各种数据。
创建L = ['Michael', 100, True]。
查:正序访问例:L[0]、L[1]...由于list是一个有序集合,所以按照索引来访问list中的指定元素。使用索引时,千万注意不要越界。
倒序访问例:L[-1]、L[-2]...倒数第一用 -1 表示,倒数第二用 -2 表示...使用倒序索引时,也要注意不要越界。
增:①L.append(元素) 方法,把新同学追加到 list 的末尾
②L.insert(n,元素)方法,它接受两个参数,第一个参数是索引号,第二个参数是待添加的新元素。原来索引为 n 的元素,以及后面的所有元素,都自动向后移动一位。
删:①L.pop()方法总是删掉list的最后一个元素,并且它还返回这个元素
②L.pop(n)方法删掉list的索引为n的元素,并且它还返回这个元素
改:对list中的某一个索引赋值,就可以直接用新的元素替换掉原来的元素,list包含的元素个数保持不变。
2-2 Tuple
tuple是另一种有序的列表,tuple 和 list 非常类似,但是,tuple创建完毕就不能修改了。创建tuple和创建list唯一不同之处是用( )替代了[ ]。
创建: t = ('Adam', 'Lisa', 'Bart');
查: t[0],t[-1]索引方式访问元素;
不能增、删、改。
可变的tuple:
t = ('a', 'b', ['A', 'B'])
L = t[2
L[0] = 'X'
L[1] = 'Y'
输出t:('a', 'b', ['X', 'Y'])
2-3 dict
花括号 {} 表示这是一个dict,然后按照 key: value, 加上逗号写出来即可。最后一个 key: value 的逗号可以省略。
dict的第一个特点是查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。
在一个dict中,key不能重复;key-value序对是没有顺序的,作为 key 的元素必须不可变
创建:{key: value,}
d={
'123': [1, 2, 3], # key 是 str,value是list
123: '123', # key 是 int,value 是 str
('a', 'b'): True # key 是 tuple,并且tuple的每个元素都是不可变对象,value是 boolean
}
查:①dict就是通过 d[key]来查找 value。但是要先判断 key 是否存在,用if 'Paul' in d:
②使用dict本身提供的一个 get 方法,在Key不存在的时候,返回None,用print d.get('Paul')
None
③dict 对象有一个 values() 方法,这个方法把dict转换成一个包含所有value的list,这样,我们迭代的就是 dict的每一个 value:d.values()
④dict除了values()方法外,还有一个 itervalues() 方法,用 itervalues() 方法替代 values() 方法,迭代效果完全一样,但是itervalues() 方法不会把dict转换成一个包含所有value的list,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。
⑤同时迭代key和value:
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 }
print d.items()
输出的是:[('Lisa', 85), ('Adam', 95), ('Bart', 59)]
可以看到,items() 方法把dict对象转换成了包含tuple的list,我们对这个list进行迭代,就可以同时获得key和value。和 values() 有一个 itervalues() 类似, items() 也有一个对应的 iteritems(),iteritems() 不把dict转换成list,而是在迭代过程中不断给出 tuple,所以, iteritems() 不占用额外的内存。因此我们就可以:
for k, v in d.iteritems():
print k,':',v
输出的是:
Lisa : 85
Adam : 95
Bart : 59
增:d[key]=value
遍历:for key in d: print key,d[key]
2-4 set
set 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的,且不能修改。这点和 dict 的 key很像。当我们传入包含重复元素的 list ,他会自动去掉重复的元素。
创建:调用 set() 并传入一个 list,list的元素将作为set的元素;
例:s = set(['A', 'B', 'C'])
查:由于set存储的是无序集合,所以我们没法通过索引来访问。访问 set中的某个元素实际上就是判断一个元素是否在set中。例:print 'A' in s 输出:True
遍历:for name in s: print name
增:s.add(元素),若元素已在set中不会报错
删:s.remove(元素),若元素不在set中会报错,所以需要先判断if 元素 in s:
第三章 一些语法
3-1 if语句
①if 语句后接表达式,然后用:表示代码块开始。
在Python交互环境下敲代码,还要特别留意缩进,4个空格,不要使用Tab,更不要混合Tab和空格,并且退出缩进需要多敲一行回车;
例如:>>> age = 20
>>> if age >= 18:
... print 'your age is', age
... print 'adult'
...
your age is 20
adult
②if:...else:...或if:...if not:...
③ if ... 多个elif ... else ...这一系列条件判断会从上到下依次判断,如果某个判断为 True,执行完对应的代码块,后面的条件判断就直接忽略,不再执行了。
3-1 for、while循环
①for...in...:
例:L = ['Adam', 'Lisa', 'Bart']
for name in L:
print name
②while...:同C语言的while循环
例:N = 10,x = 0
while x < N:
print x
x = x + 1
3-2 退出循环
①break:退出整个循环
②continue:退出此次循环,进入下一循环
③多重循环:双层for...in...:
第四章 函数
str(x)函数把其他类型转换成 str:
int(x)函数可以把其他数据类型转换为整数:
cmp(x, y) 比较函数就需要两个参数,如果 x<y,返回 -1,如果 x==y,返回 0,如果 x>y,返回 1:
abs(x)函数求绝对值
s.upper():把字符串s转换为大写
4-1 创建一个函数:
定义一个函数要使用 def 语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用 return 语句返回。
例:def my_abs(x):
if x >= 0:
return x
else:
return -x
4-2 杂记
返回多值:return x1,x2返回多值,实际上是返回单个值(x1,x2),实际上是返回一个tuple
默认参数:例如Python自带的 int() 函数,其实就有两个参数,我们既可以传一个参数,又可以传两个参数,第二个参数是转换进制:int(x)等同于int(x,10),也可以用int(x,8)获得八进制数。函数的默认参数的作用是简化调用,你只需要把必须的参数传进去。但是在需要的时候,又可以传入额外的参数来覆盖默认参数值。不传,使用默认;传了,覆盖默认。
定义可变参数:def fn(*args): ... 在函数内部,直接把变量 args 看成一个 tuple 就好了。
List切片:L[n1:n2] 取出从L[n1]一直到L[n2-1]
①L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素;如果第一个索引是0,还可以省略:L[:3];
②也可以从索引1开始,取出2个元素出来:L[1:3];
③第三个参数表示每N个取一个,上面的 L[::2] 会每两个元素取出一个来,也就是隔一个取一个。
④只用一个 : ,L[:]表示从头到尾;
倒序切片:倒数第一个元素的索引是-1。倒序切片包含起始索引,不包含结束索引。
字符串切片:‘abcdefg’[-3:] 输出:efg
索引迭代:由 enumerate() 函数自动把每个元素变成 (index, element) 这样的tuple,再迭代,就同时获得了索引和元素本身。enumerate() 函数把L变成了:[(0, 'Adam'), (1, 'Lisa'), (2, 'Bart'), (3, 'Paul')]
例:L = ['Adam', 'Lisa', 'Bart', 'Paul']
for index, name in enumerate(L):
print index+1, '-', name
复杂表达式:生成列表print [x*(x+1)for x in range(1,100,2)]
生成表格内容 ['<tr><td>%s</td><td>%s</td></tr>'
% (name, score) for name, score in d.iteritems()]
条件过滤[x * x for x in range(1, 11) if x % 2 == 0] 输出:[4, 16, 36, 64, 100]
多层表达式:例如[m + n for m in 'ABC' for n in '123'] 输出:['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3'] 等同于:
L = []for m in 'ABC':
for n in '123':
L.append(m + n)