">

简明的Python教程之概述篇

摘要:Python作为一门简洁优美且功能强大的语言,越来越受编程人员的喜欢。在工业界和学术界也是非常受欢迎的编程语言。python语言可以跨平台跨应用开发。本系列文章首先介绍Python语言及其可以做什么事情。哪些人群适合学习python和python语法特点。其次介绍了Python进阶,以实际案例演示常用的语句和控制流、表达式、函数、数据结构、标准库等知识点。然后扩展介绍了python第三方库,使读者对python有个全面的理解和认识。最后一节,采用实际案例帮助读者综合运用python知识。 (本文原创,转载必须注明出处.)

Python概述

Python介绍

Python是一种面向对象、直译式的计算机程序语言。它包含了一组功能完备的标准库,能够轻松完成很多常见的任务。它的语法简单,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。Python同样是一种动态语言,具备垃圾回收功能,能够自动管理内存使用。它经常被当作脚本语言用于处理系统管理任务和网络程序编写,然而它也非常适合完成各种高级任务。Python支持命令式程序设计、面向对象程序设计、函数式编程、面向侧面的程序设计、泛型编程多种编程范式。Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多重继承,有益于增强源代码的复用性。Python支持重载运算符,因此Python也支持泛型设计。

Python发展历史

Python的创始人是Guido van Rossum。1989年的圣诞节期间,Guido van Rossum为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。之所以选中Python作为程序的名字,是因为他是BBC电视剧——蒙提·派森的飞行马戏团(Monty Python’s Flying Circus)的爱好者。ABC是由Guido参加设计的一种教学语言。就Guido本人看来,ABC这种语言非常优美和强大,是专门为非专业程序员设计的。但是ABC语言并没有成功,究其原因,Guido认为是非开放造成的。吉多决心在Python中避免这一错误,并获取了非常好的效果,完美结合了C和其他一些语言。就这样,Python在吉多手中诞生了。目前Guido仍然是Python的主要开发者,决定整个Python语言的发展方向。Python社区经常称呼他是仁慈的独裁者。

Python标准库的主要功能

  • 文本处理,包含文本格式化、正则表达式匹配、文本差异计算与合并、Unicode支持,二进制数据处理等功能。
  • 文件处理,包含文件操作、创建临时文件、文件压缩与归档、操作配置文件等功能。
  • 操作系统功能,包含线程与进程支持、IO复用、日期与时间处理、调用系统函数、日志(logging)等功能。
  • 网络通信,包含网络套接字,SSL加密通信、异步网络通信等功能。
  • 网络协议,支持HTTP,FTP,SMTP,POP,IMAP,NNTP,XMLRPC等多种网络协议,并提供了编写网络服务器的框架。
  • W3C格式支持,包含HTML,SGML,XML的处理。
  • 其它功能,包括国际化支持、数学运算、HASH、Tkinter等。

Python优缺点

优点

  • 简单、易学、免费、开源、高层语言(无需考虑如何管理你的程序使用的内存等细节。
  • 可移植性(这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基于linux开发的android平台
  • 解释性、面向对象、可扩展性(可以部分程序用C或C++编写,然后在Python程序中使用它们。
  • 可嵌入性(可以把Python嵌入C/C++程序,从而向程序用户提供脚本功能。)丰富的库、规范的代码。

缺点

  • 单行语句和命令行输出问题、独特的语法、运行速度慢(与C和C++相比。

Python开发环境

通用IDE / 文本编辑器,很多并非集成开发环境软件的文本编辑器,也对Python有不同程度的支持。本文默认开发环境均集成在Anaconda中,第1章已经详细介绍过。此外,还有如下开发环境:

  • Eclipse + pydev插件,目前对Python 3.X只支持到3.0
  • emacs +插件
  • NetBeans +插件
  • SlickEdit
  • TextMate
  • Python Tools for Visual Studio
  • Vim +插件
  • Sublime Text +插件
  • EditPlus
  • UltraEdit
  • PSPad
  • Editra由Python开发的程序编辑器。
  • Notepad++

Python能做什么?

Python能做什么

  1. 系统编程:提供API,能方便进行系统维护和管理,很多系统管理员理想的编程工具 。
  2. 图形处理:有PIL、Tkinter等图形库支持,能方便进行图形处理。
  3. 数学处理:NumPy扩展提供大量与许多标准数学库的接口。
  4. 文本处理:python提供的re模块能支持正则表达式,还提供SGML,XML分析模块,许多程序员利用python进行XML程序的开发。
  5. 数据库编程:程序员可通过遵循Python DB-API(数据库应用程序编程接口)规范的模块与Microsoft SQL Server,Oracle,Sybase,DB2,MySQL、SQLite等数据库通信。python自带有一个Gadfly模块,提供了一个完整的SQL环境。
  6. 网络编程:提供丰富的模块支持sockets编程,能方便快速地开发分布式应用程序。
  7. Web编程:应用的开发语言,支持最新的XML技术。
  8. 多媒体应用:能进行二维和三维图像处理。PyGame模块可用于编写游戏软件。
  9. 黑客编程:python有一个hack的库,内置你熟悉的或不熟悉的函数,但是缺少成就感。

Python开发的应用案例

  1. Reddit - 社交分享网站
  2. Dropbox - 文件分享服务
  3. 豆瓣网 - 图书、唱片、电影等文化产品的资料数据库网站
  4. Django - 鼓励快速开发的Web应用框架
  5. Pylons - Web应用框架
  6. Zope - 应用服务器
  7. Plone - 内容管理系统
  8. TurboGears - 另一个Web应用快速开发框架
  9. Twisted - Python的网络应用程序框架
  10. Fabric - 用于管理成百上千台Linux主机的程序库
  11. Python Wikipedia Robot Framework - MediaWiki的机器人程序
  12. MoinMoinWiki - Python写成的Wiki程序
  13. Trac - 使用Python编写的BUG管理系统
  14. Mailman - 使用Python编写的邮件列表软件
  15. Mezzanine - 基于Django编写的内容管理系统系统
  16. flask - Python微Web框架
  17. Webpy - Python微Web框架
  18. Bottle - Python微Web框架
  19. EVE - 网络游戏EVE大量使用Python进行开发
  20. Blender - 使用Python作为建模工具与GUI语言的开源3D绘图软件
  21. Inkscape - 一个开源的SVG矢量图形编辑器。
  22. 知乎 - 一个问答网站
  23. 果壳 - 一个泛科技主题网站

Python适合谁去学?

知乎精选:

于这个问题,我先带着大家去知乎看看,大家感兴趣可以去知乎搜索下,基本上语调是一致的。笔者本人而言,本科主要net技术研究,在C#学习上花费很多精力和时间。后来读研初期又开始java方面学习。虽说技不压身,但是总是因为研究方向的客观变化去转战于不同语言之间,外加语言环境平台还是浪费了不少时间的,且均没有深入下去。反之,python的跨平台性就优势凸显了,你习惯Linux命令行,完全可以适应。接近伪代码的操作为你节省不少时间,特别在文本处理,自然语言分析方面,笔者之前用java编写,耗费一番功夫。总而言之,园子里面,多数同学为本科在读生,在拥有一门入门语言的情况下,研究下python我觉得是值得的,也是大的趋势。无论你做运维或者web开发,亦或算法研究,大数据分析。前天与一家大数据公司技术负责人聊天,他们产品全是python,从文本处理到数据清洗分析,直到模型构建结果评价。读者也可以看看:我爱自然语言处理社区,里面无论求职数据挖掘、自然语言处理、机器学习等均要求python经验。


Python语法和特点

编码

默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。 当然你也可以为源码文件指定不同的编码:

# -*- coding: cp-1252 -*-

标识符:

在python里,标识符有字母、数字、下划线组成。
在python中,所有标识符可以包括英文、数字以及下划线(),但不能以数字开头。
python中的标识符是区分大小写的。
以下划线开头的标识符是有特殊意义的。
以单下划线开头(foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用”from xxx import *”而导入.
以双下划线开头的(foo)代表类的私有成员;以双下划线开头和结尾的(foo
)代表python里特殊方法专用的标识。

python保留字

保留字即关键字,我们不能把它们用作任何标识符名称。

>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue',
 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 
'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise',
 'return', 'try', 'while', 'with', 'yield']

注释

Python中单行注释以 # 开头,实例如下:

#!/usr/bin/python3
print ("Hello, Python!") # 第二个注释

行与缩进

python最具特色的就是使用缩进来表示代码块,不需要使用大括号({})。四个空格或者Tab进行缩进。
if True:
print (“True”)
else:
print (“False”)

多行语句:Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠()来实现多行语句,例如:

total = item_one + \
        item_two + \
        item_three

在 [], {}, 或 () 中的多行语句,不需要使用反斜杠(),例如:

total = ['item_one', 'item_two', 'item_three',
        'item_four', 'item_five']

引号

Python 接收单引号(‘ ),双引号(“ ),三引号(‘’’ “””) 来表示字符串,引号的开始与结束必须的相同类型的。

word = 'word'
sentence = "这是一个句子。"
paragraph = """这是一个段落。
包含了多个语句"""

字符串

python中单引号和双引号使用完全相同。
使用三引号(‘’’或”””)可以指定一个多行字符串。
转义符 ‘\’
自然字符串, 通过在字符串前加r或R。 如 r”this is a line with \n” 则\n会显示,并不是换行。
python允许处理unicode字符串,加前缀u或U, 如 u”this is an unicode string”。
字符串是不可变的。
按字面意义级联字符串,如”this “ “is “ “string”会被自动转换为this is string。

空行

函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。

Print 输出

print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end=””:

#!/usr/bin/python3

x="a"
y="b"
# 换行输出
print( x )
print( y )

print('---------')
# 不换行输出
print( x, end=" " )
print( y, end=" " )
print()

运行结果:

a
b
---------
a b

import 与 from…import

在 python 用 import 或者 from…import 来导入相应的模块。

(1) 将整个模块(somemodule)导入,格式为: import somemodule

(2) 从某个模块中导入某个函数,格式为: from somemodule import somefunction

(3) 从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc

(4) 将某个模块中的全部函数导入,格式为: from somemodule import *

导入 sys 模块
import sys
print('================Python import mode==========================');
print ('命令行参数为:')
for i in sys.argv:
    print (i)
print ('\n python 路径为',sys.path)

导入 sys 模块的 argv,path 成员
from sys import argv,path  #  导入特定的成员

print('================python from import===================================')
print('path:',path) # 因为已经导入path成员,所以此处引用时不需要加sys.path

数据类型


参考文献

  1. Python官网
  2. 中文维基百科
  3. GitHub
  4. 图书:《机器学习实战》
  5. 图书:《自然语言处理理论与实战》

完整代码下载

源码请进【机器学习和自然语言QQ群:436303759】文件下载:自然语言处理和机器学习技术QQ交流

作者声明

本文版权归作者所有,旨在技术交流使用。未经作者同意禁止转载,转载后需在文章页面明显位置给出原文连接,否则相关责任自行承担。

白宁超 wechat
扫一扫关注微信公众号,机器学习和自然语言处理,订阅号datathinks!