咱们小组的Python学习由王程鹏和刘峻琳负责,学习了Python语言从基础特性到高级特性的方方面面。总的来讲,咱们认识到Python是一种很是强大的语言,它具备大量的牛逼特性,包括支持函数式编程、支持面向对象,除此以外还有一些其它语言不具备的特性,例如切片等,其背后都有高级数据结构的支撑。接下来,咱们将总结从教程中学到的Python的一些用法。其中前半部分为王程鹏所写,后半部分由刘峻琳撰写。那么,让咱们赶快开始吧。编程
变量和数据类型数组
Python是一种动态语言,即变量类型能够随时修改,和Javascript相似,但与C和JAVA不一样。例如定义变量:数据结构
a = 123app
以后能够再给a赋任意类型的值:函数式编程
a = "This is a string!"函数
list和tuple学习
Python内置的一种数据类型是列表:list。list是一种有序的集合,能够随时添加和删除其中的元素。在实际使用的过程当中把它当作数组使用便可。值得注意的是list有append方法向list末尾添加元素。spa
classmates = ['Michael', 'Bob', 'Tracy']
code
>>> classmates.append('Adam')对象
>>> classmates
['Michael', 'Bob', 'Tracy', 'Adam']
另外一种有序列表叫元组:tuple。tuple和list很是相似,可是tuple一旦初始化就不能修改,好比一样是列出同窗的名字。
classmates = ('Michael', 'Bob', 'Tracy')
条件判断与循环
好比作条件判断,注意if语句行末尾的冒号
if age >= 18:
print 'your age is', age
print 'adult'
或者加入else语句
if age >= 18:
print 'your age is', age
print 'adult'
else:
print 'your age is', age
print 'teenager'
循环这里涉及到可迭代对象,对全部可迭代对象都可以调用for循环语句便利其中的全部元素。好比dict为可迭代对象,下面的代码就是对一个dict作迭代(遍历)
>>> d = {'a': 1, 'b': 2, 'c': 3}
>>> for key in d:
... print key
a
c
b
dict和set
Python内置了字典:dict的支持,dict全称dictionary,在其余语言中也称为map,使用键-值(key-value)存储,具备极快的查找速度。好比查找同窗成绩,代码以下:
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
set和dict相似,也是一组key的集合,但不存储value。因为key不能重复,因此,在set中,没有重复的key。要建立一个set,须要提供一个list做为输入集合,重复元素会被自动过滤:
>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
set([1, 2, 3])
可用&和|作集合的交和并运算。
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
set([2, 3])
>>> s1 | s2
set([1, 2, 3, 4])
切片
取list或者tuple的某一段元素时会用到切片操做,经常使用用法以下所示:
>>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
第0个开始到第3个以前
>>> L[0:3]
['Michael', 'Sarah', 'Tracy']
>>> L = range(100)
全部数,每
5
个取一次
>>> L[::5]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
甚至什么都不写,只写[:]
就能够原样复制一个list。
列表生成式
列表生成式即List Comprehensions,是Python内置的很是简单却强大的能够用来建立list的生成式。
若是要生成1到100全部彻底平方数的列表。
>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
一行代码便可解决问题
生成器
和列表生成式不一样的是,把最外面的
[]
改成()即为生成器,它也是可迭代的。
>>> g = (x * x for x in range(10))
>>> for n in g:
... print n
最终输出的即为1到100共10个彻底平方数。
函数
Python的函数中不少不一样于常见语言的特性,但咱们仍是从基础提及。在Python中定义函数须要用到关键字def,例如:
def add(a, b):
return a + b
能够用pass关键字定义一个空函数:
def nop();
pass
Python中的函数能够返回多个值,其本就是返回一个tuple。好比:游戏中常常须要从一个点移动到另外一个点,给出坐标、位移和角度,就能够计算出新的新的坐标:
import math
def move(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
调用系统函数时,Python会自动进行参数匹配检查,而调用自定义函数时,没有自动参数检查,所以最好在函数体内进行人工的参数检查。
Python的强大之处在于它支持多种格式的函数参数,包括默认参数、可变参数、自定义参数。其中默认参数和C相似,咱们只说明可变参数和关键字参数。
可变参数,即利用list和tuple实现以不一样的参数个数调用同一个函数,可变参数的前面要加上*号:
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n
return sum
有以下调用结果:
>>>calc(1,2,3)
6
>>>calc(1,2,3,4)
10
关键字参数也容许传入数量不定的参数,但会将这些参数组装成一个tuple。
函数的参数能够由普通、默认、可变、关键字参数四种参数组成,但必须听从这个顺序。
面向对象
如前文所述,Python具备和C++同样的面向对象的特性,这让咱们能够利用类来实现对数据和方法的封装:
class Student(object):
pass
定义了一个空类。若是定义的类没有特定的父类,就指定从object继承。
bart = Student()
定义了一个对象的实例。能够自由地给对象赋予属性:
bart.name = 'Liu Junlin'
也能够在定义类时规定必要属性:
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
类的成员函数第一个参数永远都是self,但调用时不须要传递。
定义必需属性时加上两个下划线,则表明是私有成员,从外部没法访问:
class Student(object):
def __init__(self, name):
self.__name = name
Python类的继承性和多态性与C++相似,在此不赘述。
错误处理
和众多高级语言同样,Python也有相似try-catch这样的错误处理机制,例如:
try:
print 'try...'
r = 10 / int('a')
print 'result:', r
except ValueError, e:
print 'ValueError:', e
except ZeroDivisionError, e:
print 'ZeroDivisionError:', e
else:
print 'no error!'
finally:
print 'finally...'
print 'END'
其中try为可能会抛出错误的代码段,和其它语言相似。except为捕捉错误的代码段,和catch相似。抛出的错误可能有多种类型,因此可能须要多个except语句。else为可选项,处理没有错误的状况。finally也是可选代码段,当执行完一个except或else代码段以后执行。