Python 学习报告

我们小组的Python学习由王程鹏和刘峻琳负责,学习了Python语言从基础特性到高级特性的方方面面。总的来说,我们认识到Python是一种非常强大的语言,它具有大量的牛逼特性,包括支持函数式编程、支持面向对象,除此之外还有一些其它语言不具有的特性,例如切片等,其背后都有高级数据结构的支撑。接下来,我们将总结从教程中学到的Python的一些用法。其中前半部分为王程鹏所写,后半部分由刘峻琳撰写。那么,让我们赶快开始吧。

 

 

变量和数据类型

Python是一种动态语言,即变量类型可以随时修改,和Javascript类似,但与C和JAVA不同。例如定义变量:

a = 123

之后可以再给a赋任意类型的值:

a = "This is a string!"

 

 

list和tuple

Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。在实际使用的过程中把它当做数组使用即可。值得注意的是list有append方法向list末尾添加元素。

classmates = ['Michael', 'Bob', 'Tracy']

>>> 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代码段之后执行。

转载于:https://www.cnblogs.com/lllwp-software/p/4052041.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值