摘要: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能做什么
- 系统编程:提供API,能方便进行系统维护和管理,很多系统管理员理想的编程工具 。
- 图形处理:有PIL、Tkinter等图形库支持,能方便进行图形处理。
- 数学处理:NumPy扩展提供大量与许多标准数学库的接口。
- 文本处理:python提供的re模块能支持正则表达式,还提供SGML,XML分析模块,许多程序员利用python进行XML程序的开发。
- 数据库编程:程序员可通过遵循Python DB-API(数据库应用程序编程接口)规范的模块与Microsoft SQL Server,Oracle,Sybase,DB2,MySQL、SQLite等数据库通信。python自带有一个Gadfly模块,提供了一个完整的SQL环境。
- 网络编程:提供丰富的模块支持sockets编程,能方便快速地开发分布式应用程序。
- Web编程:应用的开发语言,支持最新的XML技术。
- 多媒体应用:能进行二维和三维图像处理。PyGame模块可用于编写游戏软件。
- 黑客编程:python有一个hack的库,内置你熟悉的或不熟悉的函数,但是缺少成就感。
Python开发的应用案例
- Reddit - 社交分享网站
- Dropbox - 文件分享服务
- 豆瓣网 - 图书、唱片、电影等文化产品的资料数据库网站
- Django - 鼓励快速开发的Web应用框架
- Pylons - Web应用框架
- Zope - 应用服务器
- Plone - 内容管理系统
- TurboGears - 另一个Web应用快速开发框架
- Twisted - Python的网络应用程序框架
- Fabric - 用于管理成百上千台Linux主机的程序库
- Python Wikipedia Robot Framework - MediaWiki的机器人程序
- MoinMoinWiki - Python写成的Wiki程序
- Trac - 使用Python编写的BUG管理系统
- Mailman - 使用Python编写的邮件列表软件
- Mezzanine - 基于Django编写的内容管理系统系统
- flask - Python微Web框架
- Webpy - Python微Web框架
- Bottle - Python微Web框架
- EVE - 网络游戏EVE大量使用Python进行开发
- Blender - 使用Python作为建模工具与GUI语言的开源3D绘图软件
- Inkscape - 一个开源的SVG矢量图形编辑器。
- 知乎 - 一个问答网站
- 果壳 - 一个泛科技主题网站
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
数据类型
参考文献
- Python官网
- 中文维基百科
- GitHub
- 图书:《机器学习实战》
- 图书:《自然语言处理理论与实战》
完整代码下载
作者声明
本文版权归作者所有,旨在技术交流使用。未经作者同意禁止转载,转载后需在文章页面明显位置给出原文连接,否则相关责任自行承担。