一、数据类型
动态编程语言,赋值时无需指明类型名称
boolean
因为Python把0、空字符串''和None看成 False,其他数值和非空字符串都看成 True,所以:
1. 在计算 a and b 时,如果 a 是 False,则根据与运算法则,整个结果必定为 False,因此返回 a;如果 a 是 True,则整个计算结果必定取决与 b,因此返回 b。
2. 在计算 a or b 时,如果 a 是 True,则根据或运算法则,整个计算结果必定为 True,因此返回 a;如果 a 是 False,则整个计算结果必定取决于 b,因此返回 b。
所以Python解释器在做布尔运算时,只要能提前确定计算结果,它就不会往后算了,直接返回结果。
整数&浮点数
11 % 4 # ==> 3
11.0 / 4 # ==> 2.75
Unicode
因为Python的诞生比Unicode标准发布的时间还要早,所以最早的Python只支持ASCII编码,普通的字符串'ABC'在Python内部都是ASCII编码的。
Python在后来添加了对Unicode的支持,以Unicode表示的字符串用u'...'表示,比如:
print u'中文' #==>中文
多行
ur'''Python的Unicode字符串支持"中文",
"日文",
"韩文"等多种语言'''
注意: 不加 u ,中文就不能正常显示。
字符串
如果字符串本身包含'怎么办?比如我们要表示字符串 I'm OK ,这时,可以用" "括起来表示:
"I'm OK"
类似的,如果字符串包含",我们就可以用' '括起来表示:
'Learn "Python" in imooc'
如果字符串既包含'又包含"怎么办?
这个时候,就需要对字符串的某些特殊字符进行“转义”,Python字符串用\进行转义。
切片:
>>> 'ABCDEFG'[:3]
'ABC'
>>> 'ABCDEFG'[-3:]
'EFG'
>>> 'ABCDEFG'[::2]
'ACEG'
List
由于Python是动态语言,所以list中包含的元素并不要求都必须是同一种数据类型,我们完全可以在list中包含各种数据:
>>> L = ['Michael', 100, True]
索引访问:
>>> print L[0] #==> 顺序 第一个
>>> print L[-1] #==> 倒数第一个
插入:
append() 总是把新的元素添加到 list 的尾部
insert() 方法,它接受两个参数,第一个参数是索引号,第二个参数是待添加的新元素。而原来索引 的元素,以及后面的所有元素,都自动向后移动一位。
删除:
pop()方法总是删掉list的最后一个元素,并且它还返回这个元素,所以我们执行 pop() 后,会打印出最后一个元素
pop(index) 删除指定索引元素
替换:
直接指定新的元素
L[index] = 'new'
切片:
L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。
tuple
tuple是另一种有序的列表,中文翻译为“ 元组 ”。tuple 和 list 非常类似,但是,tuple一旦创建完毕,就不能修改了。
tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!
切片:
L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。
dict
把名字称为key,对应的成绩称为value,dict就是通过 key来查找 value。
d = {
////'Adam': 95,
////'Lisa': 85,
////'Bart': 59
}
访问:
注意: 通过 key 访问 dict 的value,只要 key 存在,dict就返回对应的value。如果key不存在,会直接报错:KeyError。
要避免 KeyError 发生,有两个办法:
一是先判断一下 key 是否存在,用 in 操作符:
if 'Paul' in d:
print d['Paul']
如果 'Paul' 不存在,if语句判断为False,自然不会执行 print d['Paul'] ,从而避免了错误。
二是使用dict本身提供的一个 get 方法,在Key不存在的时候,返回None:
>>> print d.get('Bart') # ==> Bart
>>> print d.get('Paul') #==> None
替换:
直接重新赋值
遍历:
同上
set
二、IF-ELSE
注意: Python代码的缩进规则。具有相同缩进的代码被视为代码块,上面的3,4行 print 语句就构成一个代码块(但不包括第5行的print)。如果 if 语句判断为 True,就会执行这个代码块。if 语句后接表达式,然后用 : 表示代码块开始。
if not age >= 18:
////print 'teenager'
if age >= 18:
////print 'adult'
else:
////print 'teenager'
三、For
L = ['Adam', 'Lisa', 'Bart']
for name in L:
////print name
四、While
N = 10
x = 0
while x < N:
////print x x = x + 1
五、break
while True:
//// sum = sum + x
//// x = x + 1
//// if x > 100:
/////////break
print sum
六、continue
for x in L:
////if x < 60:
////continue
////sum = sum + x
/// /n = n + 1
七、多重循环
for x in['A', 'B', 'C']:
////for y in['1', '2', '3']:
///////// print x + y
八、编写函数
请定义一个 square_of_sum 函数,它接受一个list,返回list中每个元素平方的和:
def square_of_sum(L) :
sum = 0
for param in L :
sum += param ** 2
return sum
print square_of_sum([1, 2, 3, 4, 5])
print square_of_sum([-5, 0, 5, 15, 25])
九、多个返回值
import math
def move(x, y, step, angle):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
返回值是一个tuple,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。
十、递归函数
def fact(n):
if n==1:
return 1
return n * fact(n - 1)
使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。可以试试计算 fact(10000)。
十一、可变参数个数定义函数
def fn(*args) :
////print args
可变参数的名字前面有个* 号,我们可以传入0个、1个或多个参数给可变参数: