Python期末复习总结

一、列表

1.创建一个文件birthday.py,假设你要祝某人生日快乐!首先将年龄存储在变量age中,将姓名存储在变量name中,让程序输出类似“阿明,23岁生日快乐!”

例如:假设你要祝某人生日快乐,可能会编写类似于下面的代码

然而,会输出什么呢?

这是一个类型错误,Python发现你使用了一个值为整数(int)的变量,但是它不知道这个变量表示的是数值23,还是字符2和3。所以像这样在字符串中使用整数时,需要显示的指出你希望python将这个整数用作字符串。使用函数str()

2.1 列表简介[5分钟]

列表由一系列按特定顺序排列的元素组成。

python中,用方括号来表示列表,用逗号来分隔其中的元素。使用索引来访问列表中的元素。【演示】

2.2修改添加和删除[30分钟]

修改:直接修改

添加:a. 在列表末尾添加元素:films.append(‘寻梦环游记’)

b. 在列表中插入元素:films.insert(0,’功夫熊猫’)

删除:a. 根据要删除的元素在列表中的索引:del films[0]a=films.pop(0)

      b. 根据值删除元素:films.remove(‘海底总动员’)

²  注意:remove方法,如果列表中有相同的值,只删除第一个。

列表排序:films.sort()

列表反转:films.reverse()

列表长度:len(films)

【小练习】:想出5个你渴望去旅游的地方,将它们存储在一个列表中,练习刚才讲过的一些列表方法。

 

2.3 使用for循环遍历列表[10分钟]

我们要显示列表中所有元素的值,逐个使用print语句,增加一个列表项,增加一个print语句【演示】,但是如果列表项再增加100个?需要迭代。

in,冒号,缩进

一些错误:忘记缩进,不必要的缩进,遗漏冒号【演示】

2.4数值列表range[10分钟]

Python函数range()让你能够轻松的生成一系列的数字,经常和for一起使用。例如:,运行,只打印1~4,

还可以使用range()函数直接生成数值列表,例如:

,还可以指定步长,例如:,这是打印十以内的奇数。

【试一试】如果打印十以内的偶数怎么写?

numbers = list(range(0,11,2))

print(numbers)

2.5列表解析[10分钟]

列表解析(列表生成式)可以用来快速生成符合某种规则的列表,例如:,要使用这种语法:

首先,指定一个描述性的列表名,如squares

然后,指定一个左方括号,并定义一个表达式,用于生成你要存储到列表中的值;

接下来,编写一个for循环,用于给表达式提供值,再加上右方括号。

【试一试】使用列表解析,生成一个包含前10个整数的立方的列表

cubic = [value**3 for value in range(1,11)]

print(cubic)

2.6 切片[10分钟]

切片,可以获取列表中的任意部分元素,例如,有一个运动队成员的列表:

【试一试】创建一个从0~99的列表,并使用切片分别获取:前10个数,后10个数,20~30之间的数,前20个数每隔3个取一个,所有数每隔5个取一个。

a[:10]

a[-10:]

a[20:30]

a[:20:3]

a[:20:5]

二、字典、字符串等

1. 上次课内容回顾[10分钟]

课堂作业:1.已知a = [1,2,3,4,5,333,11,44],输出下面的结果:[4,5,333]

2. 有下面2个列表:a = [1,99,33,44,55,22] ,b = [11,33,54]

输出结果:[1,2,99,33,44,55,22,(11,33,54)]

 [1,2,99,33,101,44,55,22]

a.insert(1,2)

b = tuple(b)

a.append(b)

print(a)

a.pop(7)

a.insert(4,101)

print(a)

3.用列表推导式生成100内的大于20的偶数

a= [i for i in range(20,101,2)]

print(a)

2. 课程知识点讲解

2.1元组[5分钟]

元组与列表一样,也是一种序列,唯一的不同是元组不能修改,是不可变的。

在python中,用圆括号来表示元组。

创建一个普通元组:

 

 

创建空元组:

 

创建只包含一个值的元组:                 【注意】必须加逗号

 

list函数和tuple函数

功能:以一个序列为参数,把其转换为列表(元组)

2.2字典和集合[20分钟]

字典:

字典是Python中唯一内建的映射类型,key-value,键可以是数字、字符串甚至是元组。

我们看一本书,可以选择从头到尾的顺序阅读,也可以快速的翻到某一页。所以,使用字典的目的,是为了可以通过轻松查找某个特定的词语(键),从而找到它的值。例如:

① 表示一个游戏棋盘的状态,每个键都是由坐标组成的元组,值就是0或1,代表有无棋子

② 存储文件的修改时间,文件名作为键,时间作为值

③ 电话簿,姓名作为键,电话号码作为值

 

字典的创建方法

1.直接创建:

2.通过dict函数,通过其他字典或键值对的序列创建

 

 

基本的字典操作

① len(d)返回字典中项的数量

② d[key]返回关联到键上的值

③ d[key]=value,将键对应的值改为value

④ deld[key]删除该项

⑤ keyin d,检查字典中是否含键为key的项

 

集合:

 

遍历字典:

2.3 字符串[20分钟]

所有标准的序列操作都可以应用于字符串(索引,分片,乘法,判断成员资格,求长度,取最大值和最小值)。但是字符串是不可变的。

2.4 while循环[5分钟]

For循环是根据次数循环,while循环是根据状态循环。我们怎么把次数变成状态?【提问】,使用一个计数标识。

但是,代码变复杂了,所以,在迭代处理列表的时候,我们优先使用for循环语句。For循环会负责从列表起始位置开始,一直处理到列表末尾,不会出现“大小差1”错误。

2.5 if语句[15分钟]

分支语句语法:

if 条件表达式1:

    语句块1

elif 条件表达式2:

语句块2

else:

语句块3

 

【注意】下列值作为布尔表达式时,会被解释器看作False

         False,None,0,“”,(),[ ],{}

    其他的一切都被解释为True

随着程序变的复杂,我们需要复用代码,并且使程序尽可能的结构清晰。定义成函数。

 

三、函数

1. 小练习[20分钟]

编写一个函数请统计某个字符串中每个字母的出现次数(忽略大小写,a与A是同一个字母),并输出成一个字典。 例s=‘asdfWEfewaWAAa’ 输出为{'a': 5, 's': 1, 'd': 1, 'f': 2, 'w': 3, 'e': 2}

2. 课程知识点讲解

2.1 返回值[10分钟]

编写一个函数changeToKg(lb)来计算重量的单位转换。1=0.45359237千克。保留小数点后2位。【学生练习】

还可以返回多个值。

使用return语句,函数可以返回一个或多个值

例:

返回多个值,实际上是返回了一个元组,序列解包

2.2位置参数[15分钟]

Python的函数定义非常简单,但灵活性却非常大。这个灵活性体现在参数的多种形式上,除了普通参数之外,还有关键字参数、默认值参数、传递任意数量参数。

2.3 关键字参数[5分钟]

如果参数非常多的话,记位置很容易记错,可以使用关键字参数

【注意】一旦使用关键字参数,就所有的参数都同时指明关键字,否则会报错

2.4 默认值[5分钟]

编写函数时,可给每个参数指定默认值,在调用函数中可以省略相应得参数。例如,如果你发现调用describe_pet()时,描述的都是狗,就可将形参animal_type的默认值设置为“狗”,这样,调用该函数来描述狗时,就可以省略animal_type这个参数。

2.5可变参数[5分钟]

Python函数中,还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。

我们以数学题为例子,给定一组数字abc……,请计算a2 + b2 + c2 + ……。

要定义出这个函数,我们必须确定输入的参数。由于参数个数不确定,我们首先想到可以把abc……作为一个listtuple传进来,这样,函数可以定义如下:

def calc(*numbers):

    sum = 0

    for n in numbers:

        sum = sum + n * n

    return sum

2.6可变关键字参数[10分钟]

有时候,需要接受任意数量的参数,但预先不知道传递给函数的会是什么样的信息。比如,创建新用户时。

【注意】:参数组合使用时,参数定义的顺序必须是:必选参数、默认参数、可变参数、可变关键字参数。

四、模块

3. 小练习[10分钟]

和老师一起完成一个小程序:

说明:字符串是不可变的,列表是可变的,当将列表等可变数据作为函数的参数时,在函数中对其做的修改是永久性的。为了避免这种情况,通常需要创建一个列表的副本,去调用函数。

 

4. 课程知识点讲解

2.1 模块[20分钟]

随着你的程序变得越来越长,你可能想要将它分割成几个更易于维护的文件。或者,你也可能想在不同的程序中使用顺手的函数,而不是把代码在它们之间中拷来拷去。

为了满足这些需要,Python提供了一个方法可以从文件中获取定义,这样的文件被称为模块;模块中的定义可以导入到另一个模块中。

模块,在Python可理解为一个.py文件。文件名就是模块名,模块的模块名(做为一个字符串)可以由全局变量 __name__ 得到。

例如:你可以用自己惯用的文件编辑器在当前目录下创建一个叫 fibo.py 的文件,录入如下内容:

现在进入Python解释器并使用以下命令导入这个模块:

这样做不会直接把 fibo 中的函数导入当前的语义表;它只是引入了模块名 fibo 。你可以通过模块名按如下方式访问这个函数:

如果打算频繁使用一个函数,你可以将它赋予一个本地变量:

2.2 导入模块[15分钟]

模块可以导入其他的模块。 一个(好的)习惯是将所有的 import 语句放在模块的开始(或者是脚本)。import 语句的一个变体直接从被导入的模块中导入命名到本模块的语义表中。例如:

还可以使用as给函数或模块指定别名

from fibo import fib as f

import fibo as f

或者导入模块中的所有定义。需要注意的是在实践中往往不鼓励从一个模块或包中使用 * 导入所有,因为这样会让代码变得很难读。

2.3 作为脚本来执行模块[10分钟]

通常,我们会在模块中添加类似下面的代码:

就可以让此文件像作为模块导入时一样作为脚本执行。

如果模块被导入,不会执行这段代码:

这通常用来为模块提供一个便于测试的用户接口

2.4 内建模块[10分钟]

查看python文档,build-in-function和内建模块

sys模块:

datetime模块:

2.5 模块的搜索路径[5分钟]

内建模块,我们是可以随时随地使用的,我们自己编写的模块如果使用,就需要和主程序放在同一个目录中。那么,解释器是根据什么去寻找模块的呢?

实际上,解释器由 sys.path 变量指定的路径目录搜索模块,该变量初始化时默认包含了输入脚本(或者当前目录), PYTHONPATH 和安装目录。

① 程序的根目录

② PYTHONPATH环境变量设置的目录

③ 标准库的目录

【注意】自己创建模块时要注意命名,不能和Python自带的模块名称冲突。例如,系统自带了sys模块,自己的模块就不可命名为sys.py,否则将无法导入系统自带的sys模块。

如果我们要添加自己的搜索目录,有两种方法:

一是直接修改sys.path,添加要搜索的目录:

第二种方法是设置环境变量PYTHONPATH,该环境变量的内容会被自动添加到模块搜索路径中。

2.6 包[10分钟]

使用模块可以避免函数名和变量名冲突。相同名字的函数和变量可以分别存在不同的模块中。但是,如果模块名冲突了,怎么办?

为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。

是由一系列模块组成的集合。当不同作的模块进行按文件夹分类后再组成一个整体的库,可以称为包。为了让Python将目录当做内容包,目录中必须包含__init__.py文件,用于标识当前文件夹是一个包。最简单的情况下,只需要一个空的__init__.py文件即可。

执行 from package import *时,如果包中的__init__.py 代码定义了一个名为__all__ 的列表,就会按照列表中给出的模块名进行导入。

 

5. 安装第三方模块[10分钟]

安装第三方模块,可以通过包管理工具pip完成。第三方库都会在Python官方的pypi.python.org网站注册,要安装一个第三方库,必须先知道该库的名称。

(1)在命令行下,运行:pip install libname

或者,可以下载安装包之后离线安装,安装包一般以whl为后缀名,方法是:pip install libpath

(2)源文件安装:如果下载下来的安装包为带有源文件的压缩包,解压之后,运行setup.py进行安装,方法是:命令行切换到安装包中setup.py文件所在的目录,执行 python setup.py install

(3)运行安装包:有些类库提供了双击运行直接安装的安装包,比如python连接mysql数据库的驱动 mysql-connector-python,这些安装包的后缀名为msi或者exe。下载下来之后,双击运行之后就安装好了,前提是要根据python的版本及windows的位数下载对应的安装包,否则安装过程会报错或者直接提示无法安装。

(4)使用Anaconda

【Matplotlib小例子】:np.linspace(0, 2 * np.pi, 50) 这段代码将会生成一个包含 50 个元素的数组,这 50 个元素均匀的分布在 [0, 2pi] 的区间上。

 

五、文件和异常处理

2.1 小练习[10分钟]

我们先看一段程序:

Print(‘Hello,’+name+‘,your phoneNumber is ’+phone+‘!’)

这段程序中使用了我们之前学过的输入输出方法,输入:通过键盘读入数据,输出:通过终端窗口打印结果。但是这段代码,使用了一种新的格式化输字符串方式,也是python官方推荐的格式化方法。格式化字符串的函数str.format(),此函数可以快速处理各种字符串。具体使用方法可以参考:https://www.cnblogs.com/gide/p/6955895.html

格式化精度:

2.2 文件

随着我们编写的程序越来越复杂,更多的时候我们的输入输出是通过文件读写来完成的。【例子:读《春江花月夜》】

在这个程序中,第1行代码做了大量的工作。我们先来看看函数open()。要以任何方式使用文件,读文件也好,写文件也好,都得先打开文件。函数 open() 用来打开文件,返回一个表示文件的对象。参数是要打开的文件的名称,python在当前执行的文件所在的目录中查找指定的文件。

有了表示data1.txt的文件对象后,使用方法read()读取该文件的全部内容,并将其作为一个长字符串存储在变量s中,然后将其打印出来。最后不要忘了关闭文件。

2.2.1 打开和关闭文件[10分钟]

函数 open() 用来打开文件,返回一个表示文件的对象,语法如下: open(filename[, mode[buffering]])

open函数使用一个文件名作为唯一的强制参数,然后返回一个文件对象。Modebuffering参数都是可选的。

filename指明要打开的文件名,可以使用相对路径或绝对路径

Mode:

‘+’参数可以用到其他任何模式中,指明读和写都是允许的。

‘b’使用二进制模式处理文件。一般来说,Python假定处理的是文本文件。但是如果是声音文件或者图像文件,就需要使用二进制模式来处理。【板书文件的编码】

Buffering:缓冲。0表示无缓冲(所有的读写操作都直接针对硬盘),1表示有缓冲(python使用内存来代替硬盘,让程序更快,只有使用flush或者close时才会更新硬盘上的数据),大于1的数字代表缓冲区的大小,-1代表使用默认的缓冲区大小

函数close()用来关闭文件。

关键字with的使用:

使用open()和close()来打开和关闭文件时,如果程序存在bug,导致close()语句未执行,文件将不会关闭。可以使用异常处理机制(try-finally语句)避免这种情况。还有一种更简单的,那就是使用关键字with

 

2.2.2 读文件[10分钟]

要读取文件内容,需要调用 f.read(size) ,该方法读取若干数量的数据并以字符串形式返回其内容, size 是可选的数值,指定字符串长度。如果没有指定 size 或者指定为负数,就会读取并返回整个文件。如果到了文件末尾,f.read() 会返回一个空字符串(”“)。

f.readline() 从文件中读取单独一行,字符串结尾会自动加上一个换行符( \n ),只有当文件最后一行没有以换行符结尾时,这一操作才会被忽略。

f.readlines()返回一个列表,其中包含了文件中所有的数据行。

 

遍历文件对象来读取文件行:

2.2.3 写文件[5分钟]

f.write(string) 方法将 string 的内容写入文件,并返回写入字符的长度。

f.writelines(list)方法写入多行内容。

 

小练习[10分钟]:

2.3 异常处理

Python 中有两种错误:语法错误和异常( syntax errors 和 exceptions )。

语法错误:语法分析器指出错误行,并且在检测到错误的位置前面显示一个小“箭头”。

异常:运行期检测到的错误称为异常

错误信息的最后一行指出发生了什么错误。异常也有不同的类型,异常类型做为错误信息的一部分显示出来:示例中的异常分别为零除错误( ZeroDivisionError ) ,命名错误( NameError) 和 类型 错误( TypeError )。

Python通过traceback来告诉你运行时发生了某种意外情况。如果你忽略异常,你的程序会崩溃。但是,python给你提供了一个机会,那就是允许你在异常发生时捕获异常。

2.3.1 try-except语句[40分钟]

Java中使用try-catch语句来处理异常,在Python中,使用try-except代码块处理。

当我们认为某些代码可能会出错时,就可以用try来运行这段代码,如果执行出错,则后续代码不会继续执行,而是直接跳转至错误处理代码,即except语句块,执行完except后,如果有finally语句块,则执行finally语句块,至此,执行完毕。

上面的代码在计算10 / 0时会产生一个除法运算错误:

 

try...

except: division by zero

finally...

END

从输出可以看到,当错误发生时,后续语句print('result:', r)不会被执行,except由于捕获到ZeroDivisionError,因此被执行。最后,finally语句被执行。然后,程序继续按照流程往下走。

如果把除数0改成2,则执行结果如下:

try...

result: 5

finally...

END

由于没有错误发生,所以except语句块不会被执行,但是finally如果有,则一定会被执行

一个 try 语句可能包含多个except子句,分别指定处理不同的异常。至多只会有一个分支被执行。异常处理程序只会处理对应的try子句中发生的异常,在同一个 try 语句中,其他子句中发生的异常则不作处理。

try:

    print('try...')

    r = 10 / int('a')

    print('result:', r)

except ValueError as e:

    print('ValueError:', e)

except ZeroDivisionError as e:

    print('ZeroDivisionError:',e)

finally:

    print('finally...')

print('END')

int()函数可能会抛出ValueError,所以我们用一个except捕获ValueError,用另一个except捕获ZeroDivisionError

一个except子句可以在括号中列出多个异常的名字。

此外,如果没有错误发生,可以在except语句块后面加一个else,当没有错误发生时,会自动执行else语句

try:

    print('try...')

    r = 10 / int('2')

    print('result:', r)

except ValueError as e:

    print('ValueError:', e)

except ZeroDivisionError as e:

    print('ZeroDivisionError:',e)

else:

    print('no error!')

finally:

    print('finally...')

print('END')

 

Python所有的错误都是从BaseException类派生的,常见的错误类型和继承关系看这里:

https://docs.python.org/3/library/exceptions.html#exception-hierarchy

 

六、面向对象编程

6.引入面向对象的概念[5分钟]

面向对象编程是最有效的软件编写方法之一,和它对立的是面向过程编程。举个例子。给你一个任务,你要思考怎么做。

如果你的思维方式是:我先做什么,再做什么……这叫面向过程;

如果思维方式是:我先做一个什么东西来做这件事,再做一个什么东西来做那件事,然后它们怎么相互配合……这叫面向对象。

比如,计算一个三角形的周长和面积。面向过程的思维是:获得三个边的长度->三个边长度相加得到周长->海伦公式得到面积。

面向对象的思维是:根据三个边的长度创建一个三角形->让三角形计算自己的周长->让三角形计算自己的面积。

我们创建的三角形就称为对象,不同长度的三条边构成不同的三角形,不管怎么样,它们都叫做三角形。我们可以创建一个表示三角形的类Triangle,它表示的不是特定的三角形,而是任意三角形,它就像一个抽象的模版。三角形都有哪些共同的特性呢?三条边的长度,a,b,c,三角形的周长perimeter和面积area。

7. 课程知识点讲解

2.1 创建类[10分钟]

Triangle类为例,在Python中,定义类是通过class关键字:

Python中,首字母大写的名称指的是类,这个类定义中的括号是空的,表示我们要从空白创建这个类。第4行,我们编写了一个文档字符串,对这个类的功能做了描述。

1.    __init__方法:类中的函数成为方法,之前学到的有关函数的一切都适用于方法。__int__是一个特殊的方法,在创建类的实例时,Python都会自动运行它。开头和末尾各有两个下划线,这是一种约定,为了避免Python默认方法与普通方法发生名称冲突。

2.    每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。创建类实例的时候,self会自动传递,我们只需要给后面的参数赋值。

2.2 使用类[20分钟]

1) 根据类创建实例

2) 访问属性

3) 给属性指定默认值

4) 访问方法

5) 访问限制

Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。但是,从前面Triangle类的定义来看,外部代码还是可以自由地修改一个实例的属性:

如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问,所以,我们把Triangle类改一改:

class Triangle():

 

    def __init__(self, a, b,c):

        self.__a = a

        self.__b = b

        self.__c = c

 

这样就确保了外部代码不能随意修改对象内部的状态,这样通过访问限制的保护,代码更加健壮。但是如果外部代码要获取、修改属性怎么办?可以给Triangle类增加get_aset_a这样的方法:

class Triangle():

    ...

    def get_a(self):

        return self.__a

 

    def set_a(self,a):

        self.__a=a

你也许会问,原先那种直接通过t1.a = 1也可以修改啊,为什么要定义一个方法大费周折?因为在方法中,可以对参数做检查,避免传入无效的参数:

class triangle():

    ...

    def set_a(self, a):

        if 0 <= a <= 100:

            self.__a = a

        else:

            raise ValueError('badvalue')

 

2.3 小练习[10分钟]

编写一个表示汽车的类Car,它存储了有关汽车的信息(制造商make、型号model、年份year),还有一个描述这些信息的方法description()

2.4 继承[30分钟]

如果要编写的类是另一个现有类的特殊版本,可使用继承。一个类继承另一个类时,它将自动获得另一个类的所有属性和方法;原有的类成为父类,新类成为子类。子类还可以定义自己特有的属性和方法。

1) 子类的__init__方法

创建子类的实例时,Python首先需要完成的任务是给父类的所有属性赋值。

例如,电动汽车是一种特殊的汽车,因此我们可以在Car类的基础上创建新类ElectricCar,这样,ElectricCar就继承了Car的所有属性和方法。

创建子类时,父类必须包含在当前文件中,且位于子类前面。定义子类时,必须在括号内指定父类的名称。

super()是一个特殊函数,帮助Python将父类和子类关联起来。可以通过super调用父类的方法。

2) 给子类定义属性和方法

一个类继承另一个类后,还可以继续为它添加其特有的属性和方法。例如,给电动汽车类添加其特有的属性(电瓶),以及一个描述该属性的方法。

3) 重写父类的方法

对于父类的方法,如果它不符合子类模拟的实物的行为,都可对其进行重写。假设Car类有一个名为fill_gas_tank()的方法,它对全电动汽车来说毫无意义,因此,我们需要重写它。

4) 将实例用作属性

对于过于复杂的类,我们可以将其拆分成多个协同工作的小类。例如,电动汽车的电瓶有很多专门的属性和方法,我们可以单独建一个名为Battery的类,并将Battery实例作为ElectricCar类的一个属性。

2.5导入类[10分钟]

我们之前学过导入模块,导入模块中的函数,那么导入类和导入模块是一样的。

导入单个类:from car import Car

在一个模块中存储多个类:from car import ElectricCar

从一个模块中导入多个类:from car import Car,ElectricCar

导入整个模块:import car

导入模块中的所有类:from module_name import *

 

七、数据库操作(详见PPT)

 

八、今后的路

Python学完以后能做什么?

Python是一门脚本语言,因为能将其他各种编程语言写的模块粘接在一起,也被称作胶水语言。

Ø  1WEB开发

在国内,豆瓣一开始就使用Python作为web开发基础语言,知乎的整个架构也是基于Python语言,这使得web开发这块在国内发展的很不错。

尽管目前Python并不是做Web开发的首选,但一直都占有不可忽视的一席。Python中有各类Web框架,无论是简单而可以自由搭配的微框架还是全功能的大型MVC框架都一应俱全,这在需要敏捷开发的Web项目中也是十分具有优势的。广泛使用(或曾经广泛使用)Python提供的大型Web服务包括知乎、豆瓣、Dropbox等网站。加之Python本身的“胶水”特性,很容易实现在需要大规模性能级计算时整合其它语言,同时保留Web开发时的轻便快捷。

目前,国内的Python web开发主要有两个技术栈:

a.     Django

Django是一个高级的敏捷web开发框架。Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能。

b.     Flask

相对于DjangoFlask则是一个轻量级的web框架,Flask的最大的优势是性能优越,适合配合手机客户端开发后台API服务。国内基于FlaskRestful API服务这快很火,也是需求最大的。知名的比如百度、网易、小米、陌陌等等很多公司都有基于Flask的应用部署。当然,如果你想做一个传统的web网站,还是建议使用DjangoFlask的优势是后端、API,不适合构建全功能网站。

Ø  2、网络爬虫

网络爬虫是Python比较常用的一个场景,国际上,google在早期大量地使用Python语言作为网络爬虫的基础,带动了整个Python语言的应用发展。以前国内很多人用采集器搜刮网上的内容,现在用Python收集网上的信息比以前容易很多了。

Python在这个方面有许多工具上的积累,无论是用于模拟HTTP请求的Requests、用于HTML DOM解析的PyQuery/BeautifulSoup、用于自动化分布式爬取任务的Scrapy,还是用于最简化数据库访问的各种ORM,都使得Python成为数据爬取的首选语言之一。特别是,爬取后的数据分析与计算是Python最为擅长的领域,非常容易整合。目前Python比较流行的网络爬虫框架是功能非常强大的scrapy

Ø  3、人工智能(AI)与机器学习

人工智能是现在非常火的一个方向,AI热潮让Python语言的未来充满了无限的潜力。现在释放出来的几个非常有影响力的AI框架,大多是Python的实现,为什么呢?因为Python足够动态、具有足够性能,这是AI技术所需要的技术特点。比如基于Python的深度学习库、深度学习方向、机器学习方向、自然语言处理方向的一些网站基本都是通过Python来实现的。

机器学习,尤其是现在火爆的深度学习,其工具框架大都提供了Python接口。Python在科学计算领域一直有着较好的声誉,其简洁清晰的语法以及丰富的计算工具,深受此领域开发者喜爱。

早在深度学习以及Tensorflow等框架流行之前,Python中即有scikit-learn,能够很方便地完成几乎所有机器学习模型,从经典数据集下载到构建模型只需要简单的几行代码。配合Pandasmatplotlib等工具,能很简单地进行调整。

TensorflowPyTorchMXNetKeras等深度学习框架更是极大地拓展了机器学习的可能。使用Keras编写一个手写数字识别的深度学习网络仅仅需要寥寥数十行代码,即可借助底层实现,方便地调用包括GPU在内的大量资源完成工作。

值得一提的是,无论什么框架,Python只是作为前端描述用的语言,实际计算则是通过底层的C/C++实现。由于Python能很方便地引入和使用C/C++项目和库,从而实现功能和性能上的扩展,这样的大规模计算中,让开发者更关注逻辑于数据本身,而从内存分配等繁杂工作中解放出来,是Python被广泛应用到机器学习领域的重要原因。

Ø  4、数据分析处理

数据分析处理方面,Python有很完备的生态环境。“大数据”分析中涉及到的分布式计算、数据可视化、数据库操作等,Python中都有成熟的模块可以选择完成其功能。对于Hadoop-MapReduceSpark,都可以直接使用Python完成计算逻辑。这无论对于数据科学家还是对于数据工程师而言都是十分便利的。

其中诸如Seaborn这样的可视化库,能够仅仅使用一两行就对数据进行绘图,而利用Pandasnumpyscipy则可以简单地对大量数据进行筛选、回归等计算。而后续复杂计算中,对接机器学习相关算法,或者提供Web访问接口,或是实现远程调用接口,都非常简单。

import seaborn as sns 

 

sns.set() 

 

# Load the example tips dataset 

 

iris = sns.load_dataset("iris") 

 

# Plot tip as a function of toal bill across days g = sns.lmplot(x="sepal_length", y="sepal_width", hue="species", 

 

truncate=True, size=5, data=iris) 

 

# Use more informative axis labels than are provided by default 

 

g.set_axis_labels("Sepal length (mm)", "Sepal width (mm)") 

Python在数据分析处理中典型的应用量化交易,简单来说就是说借助于强悍的数学模型数据分析来实现利益最大化损失最小化,目前已经有许多很好的框架可以使用。

Ø  5、服务器运维及其它小工具

Python对于服务器运维而言也有十分重要的用途。由于目前几乎所有Linux发行版中都自带了Python解释器,使用Python脚本进行批量化的文件部署和运行调整都成了Linux服务器上很不错的选择。Python中也包含许多方便的工具,从调控ssh/sftp用的paramiko,到监控服务用的supervisor,再到bazel等构建工具,甚至conan等用于C++的包管理工具,Python提供了全方位的工具集合,而在这基础上,结合Web,开发方便运维的工具会变得十分简单。

更有意思的是,Python社区的开发者们还制作了诸如itchat这样的开发工具包,你大可以用微信来管理服务器或是各种服务的运行。想想看,一个微信机器人,能够在出现异常时,又或者每天固定时刻汇报服务器或是程序运行情况,甚至包含用matplotlib/seaborn绘制的图表,一目了然,而你对它发上简简单单一句话,即可完成对服务器的调整。

Ø  6、桌面程序

除此之外,Python也可以用于桌面软件开发(如sublimetext等),甚至移动端开发(参看kivy)。Python简洁方便,各种工具包齐全的环境,能大幅度减少开发者的负担。著名的UI框架QTPython语言的实现版本PyQTPython简单易用的特性加上QT的优雅,可以很轻松的开发界面复杂的桌面程序,并且能轻松实现跨平台特性。

Ø  7、多媒体应用

可以用Python里面的PILPiddleReportLab 等模块对图象、声音、视频、动画等进行处理,还可以用Python生成动态图表和统计分析图表。另外,还可以利用PyOpenGl模块非常快速有效的编写出三维场景。

曾经为“阿贝斯(Abyss)”、“星际迷航(StarTrek)”、“Indiana Jones”等超级大片制作过特技和动画的工业光魔公司(Industrial Light)就采用Python进行商业动画制作。然而在很早以前,Python就是一种游戏编程的辅助工具,在《星球大战》的制作中扮演了重要的角色,现在,完全可以通过Python写出非常棒的游戏程序。

================================================================

 

开发工具:

一个好的开发工具应该是德才兼备:长的要漂亮,功能要强大,使用要简单,下面这2个都是这样的爆款

1.SublimeText:发烧友级

Sublime 一个字就是炫,非常的酷,用了之后视觉效果上非常享受的。现在已经到Sublime Text3.而且现在是非常流行的编辑器,基本上前端开发HTMLCSSJS都用它。

第一它非常简洁,第二有庞大的插件库,第三字体配色实在是太好看了(我用了这么多工具,众里寻他千百度,蓦然回首发现还是它的字体配色最好看)

当然优点虽然很多,但也是有一些缺陷,就是交互不是特别的好,需要装一些插件来弥补,一般来说python 开发必装的有:

PackageControl,Emmet,PyV8,SublimeREPL(终端的交互调试)SublimeCodeIntel(代码的提示)

2.Pycharm:专业级

如果说只能推荐一款python IDE,那么非Pycharm莫属,因为它的功能非常强大,

而且很多功能(调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制)这些已经都已经内置了,不用另外安装插件。最爽的是它的代码跳转非常实用,当你写一个大几千行的项目,里面的类,函数很多的时候,就需要它方便的跳转.

而且这款神器结合了 Flask,Django,H5,AngularJS 都包含了。这样对于web开发就不用再安装其他的IDE了。

另外还有一个非常重要的功能就是支持代码重构。

 

 

 

 


  • 21
    点赞
  • 257
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值