第一部分 使用入门 第1章 问答环节(可略,总之很万能)

Python流行背后的主要原因

人们为何使用Python

软件质量

Python注重可读性、一致性和软件质量。支持软件开发的高级重用机制,例如面向对象(object-oriented,OO)以及函数式编程(function programming)

import this

The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

从设计之处,Python就秉承了一种独特的简洁而极具可读性的语法,以及一种高度一致性的编程模型。

Python之禅 by Tim Peters
优美胜于丑陋(Python 以编写优美的代码为目标)
明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)
简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)
复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)
扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套)
间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题)
可读性很重要(优美的代码是可读的)
即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上)
不要包容所有错误,除非你确定需要这样做(精准地捕获异常,不写 except:pass 风格的代码)
当存在多种可能,不要尝试去猜测
而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法)
虽然这并不容易,因为你不是 Python 之父(这里的 Dutch 是指 Guido )
做也许好过不做,但不假思索就动手还不如不做(动手之前要细思量)
如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然(方案测评标准)
命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召)

除了以上的设计总之,Python还包含模块化、OOP在内的一些工具来自然的提升程序的可重用性。

开发者生产效率

相对于C、C++和Java等编译/静态类型语言,Python的开发者效率提高了数倍。代码长度往往只有C++或Java代码的1/5~1/3。并且可以立即运行。
Python作为开发工具均以付出更少的精力完成更多的任务而脱颖而出。
Python致力于开发速度的最优化:其简洁的语法、动态类型、无需编译、内置工具包等特性使程序员能够快速完成项目开发。而使用其他开发语言则需要几倍的时间。

程序的可移植性

绝大多数Python程序不做任何改变即可在所有主流计算机平台上运行。
Python应对多种系统,提供了对应系统的各种库和接口。

标准库的支持

Python内置了众多预构建并可移植的功能模块,这些功能模块叫做标准库(standard)。
标准库支持一系列应用级的编程任务,涵盖了从字符模式到网络脚本编程的匹配等方面。
Python还有众多的第三方工具(库)包括网站搭建、数值计算、串口读写、游戏开发等各个方面。例如NumPy,一个免费的,与MATLAB一样功能强大的计算开发平台。

组件集成

Python脚本可以通过多种集成机制轻松的与应用程序的其他部分进行通信。这使得Python称为实现产品定制和扩展的工具。
Python可以调用C和C++的库,可以被C和C++的程序调用,可以与Java和.NET组件继承,可以与COM和Silverlight等框架进行通信,可以通过串行端口与设备进行连接,可以通过SOAP、CML-RPC和CORBA等接口与网络进行交互。
Python绝不是一个孤立的工具。

享受乐趣

Python的易用性和强大内置工具使编程成为一种乐趣,而不是琐碎的重复劳动。

Python是一门“脚本语言”吗

Python是一门通用型的编程语言,而它时长扮演着脚本语言的角色。
Pyrhon是一门面向对象的脚本语言。
Python是一门融合了面向过程、函数式和面向对象编程范式的多目标语言。
“脚本”如同胶水一样黏在Python上,这不同于其他需要编写大量繁复代码的语言。
“脚本”(script)往往倾向于描述简单的顶层代码文件,而“程序”(program)则用来描述那些相对复杂一些的多文件应用。

Python的脚本语言角色

Shell工具

面向系统的脚本语言工具,诸如文本文件的处理以及启动其他程序

控制语言

控制或重定向其他应用程序组件的“胶水”层,诸如测试任务

使用便捷

应用于快速编程任务的一种简单语言。但他之所以简单是因为他的便捷使得任务简单。
他通常应用于快速作业任务和长期战略开发。

Python是不是脚本语言?

这取决于你看待这个问题的视角
“脚本语言”最适合用于描述一种Python所支持的快速和灵活的开发模式,而不是特定的应用领域的概念。

Python的缺点

Python重大且普遍的唯一缺点:在现有的实现方式下,与C和C++这类完全编译并且较低层的语言相比,Python的执行速度还不够快。
底层语言同底层硬件的架构有着更加直接的对应关系。

目前Python的标准实现方式:将源代码的语句编译(翻译)为字节码(byte code)的形式,之后再将字节码解释出来。
由于字节码与平台无关,因此具有可移植性。
Python通常不会将代码编译成底层的二进制代码(例如Intel芯片的指令),一些Python程序将会比像C这样的完全编译语言慢一些。
PyPy系统能够通过在程序运行时的进一步编译来达到在某些代码上10到100倍的运行加速。

一些Python功能是利用内部的C库实现的,例如GUI,这类速度不慢。
Python开发速度带来的效益比执行速度带来的损失更为重要,特别是在当前计算机处理速度极大提升的情况下。

NumPy是双语言混编策略,既高效又易用。

谁在用Python

https://www.python.org/about/success/
https://www.python.org/about/apps/

Google网页搜索系统
YouTube
Dropbox
树莓派
EVE Online
bittorrent
工业光魔、皮克斯等电影特效
ESRI的GIS地图
Google的App Engine网页开发框架
IronPort电子邮件服务器部分代码100万行
Maya 3D建模、动画的一个API
NSA加密和只能分析
iRobot的商用和军用机器人
文明IV的可定制脚本化事件
GIMP
OLPC的用户界面与活动模型
网飞
硬件大佬们的硬件测试
金融市场预测
NASA等机构的科学计算

注:据说B站、知乎由Python转战Go
对比学习:Golang VS Python3

Python和Go都很火,我要怎么选?

Go 语言教程 | 菜鸟教程

经过一波搜索后,确定了Go的当前定位,虽然Go称之为21世纪的C语言,简洁、快速、并发,但涉及面少,扩展不丰富。如果是为了工作而学习Go,无可厚非,毕竟现在Web后端已经由Go逐步代替。如果是为了专业学习,还是推荐C++、Java。如果是启蒙编程或者玩玩,就Python。

使用Python可以做些什么

无限大

系统编程

Python对操作系统服务的内置接口,使其能够成为编写可移植的维护操作系统的管理工具和不见(有时也称为Shell工具)的理想工具。
Python程序可以搜索文件和目录树,可以运行其他程序,用进程或线程进行并行处理等。

Python的标准库绑定了POSIX(可移植操作系统接口,Portable Operating System Interface,缩写为POSIX,是IEEE为要在各种UNIX操作系统上运行软件,而定义API的一系列互相关联的标准的总称,其正式称呼为IEEE Std 1003,而国际标准名称为ISO/IEC 9945)
以及其他常规操作系统(OS)工具:环境变量、文件、套接字、管道、进程、多线程、正则表达式模式匹配、命令行参数、标准流接口、Shell命令启动器、文件名扩展、zip文件工具、XML和JSON解释器、CSV文件处理器等。

很多Python的系统工具设计时都考虑了其可移植性,例如复制目录树。
EVE Online才用的Stackless Python实现还为多处理需求提供了高级的解决方案。
Stackless Python:并发特化版本的Python,Stackless 最少的栈。stackless python初体验
套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象,是应用程序与网络协议根进行交互的接口。
管道是一种通信机制,通常用于进程间的通信(也可通过socket进行网络通信),它表现出来的形式将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)。
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。
线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
标准流是当一个电脑程序运行时,在它和它的环境间(典型为终端),事先连接的输入和输出频道。
XML Extensible Markup Language 可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。被设计用来传输和存储数据。
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。CSV文件格式的通用标准并不存在。

图形用户界面(GUI)

Python的简洁以及快速的开发周期十分适合开发桌面GUI程序。
Python内置了tkinter的标准面向对象接口Tk GUI API,使Python程序可以生成可移植的本地设计感的GUI。
一个免费的扩展包PMW为tkinter工具包增加了一些高级部件。
此外,基于C++平台的工具包wxPython GUI API可以使用Python构建可移植的GUI。

诸如Dabo等一些高级工具包是构建在wxPython和tkinter的基础API之上的。
其他GUI工具:通过PyQt使用Qt,通过PyGTK使用GTK,通过PyWin32使用MFC,通过IronPython使用.NET,已经通过Jython或JPype使用Swing等。

对于运行于浏览器中的应用或具有一些简单界面需求的应用,Jython和Python Web框架以及服务器CGI脚本能够作为实现用户界面的选项。

Internet脚本

Python提供了标准的Internet模块,他使得Python程序能够广泛的在多种网络任务中发挥作用,无论是在服务器端还是在客户端。
脚本可以通过套接字进行通信;从发送到服务器端的CGI脚本表单中提取信息;通过FTP传输文件;解析、生成XML和JSON文档;发送、接收、生成和解析Email;通过URL获取网页;从获取的网页中解析HTML文件;通过XML-RPC、SOAP和Telnet等协议进行通信等。

使用Python进行Internet编程的第三方工具:
HTMLGen生成HTML文件
mod_python在Apache Web服务器上高效运行Python,并支持Python Server Page的服务器端网页模板渲染
Jython提供Python/Java集成,支持在客户端运行服务器端Applet

Python Web 开发工具包:Django、TurboGears、web2py、Pylons、Zope、WebWare,使得Python能够快速构建功能完善和高质量的网站。
这类工具包包含了:对象关系映射器(Object-Relational Mapper,ORM)、模型视图控制器(Model View Controller,MVC)架构、服务器端脚本和模板,支持AJAX,从而提供了完整的、企业级的Web开发解决方案。

Python扩展并进入到了富互联网应用(Rich Internet Application,RIA)领域,可使用的工具有Iron Python的Silverlight、pyjs(pyjamas)和Python的JavaScript的编译器、AJAX框架以及部件集。
Python通过使用App Engine也进军云计算和其他将在下文数据库部分提到的领域。互联网发展到哪里,Python就会很快驻扎到哪里。

组件集成

前面介绍过,Python的组件集成角色时,曾把他描述为一门控制语言。Python通过C/C++系统进行扩展以及嵌入C/C++系统的特性,使其能够作为一种灵活的黏合语言,可以脚本化处理其他系统和组件的行为。
例如:将C库集成到Python中,Python就可以进行测试并调用库中的其他组件;将Python嵌入到产品中,则可以让你在不需要重新编译整个产品或分发源代码的情况下,单独对产品进行定制(例如某客户端应对不同等级客户生成的不同等级功能的GUI)。

SWIG和SIP这样的代码生成工具可以使已编译组件接入Python便于脚本使用这部分工作自动化。并且CPython允许程序员将代码混合到Python和类C代码中。还有更大一些的框架,例如Python在微软Windows是的COM支持、基于Java的Jython、基于.NET实现的IronPython提供了多种编写组建的替代方式。例如,在Windows中,Python脚本可利用框架对微软Word和Excel文件进行脚本处理、访问Silverlight等。

数据库编程

对于传统的数据库需求,Python提供了对所有主流关系数据库系统的接口:Sybase、Oracle、Informix、ODBC、MySQL、PostgreSQL、SQLite等。
Python定义了一种通过Python脚本存取SQL数据库系统的可移植的数据库API,使得在不同系统下,仍可访问对应的数据库。另外自2.5版,Python内置了SQLite。

在非SQL部分,Python的标准pickle模块提供了一个简单的对象持久化系统:他能够让程序轻松地将整个Python对象保存到文件和类文件载体中,以及从这些载体中恢复。另外,ZODB、Durus等第三方系统,为Python脚本提供了完整的面向对象数据库系统;其他诸如SQLObject和SQLAlchemy系统,实现了对象关系映射(ORM)。从而将Python的类模型移植到了关系型表;PyMongo作为MongoDB的一个接口(MongoDB是一种高性能、非SQL、开源的JSON风格文档数据库),使用了类似于Python自有的列表和字典的结构来存储数据,其文本可以使用Python自带的标准库json模块进行解析和创建。

其他一些系统提供更加专业化的数据存储方式,包括Google App Engine中的数据存储,它使用Python的类对数据建模并提供良好的扩展性能,此外还涌现了一批注入Azure、PiCloud、OpenStack和Stackato的云存储方案。

快速原型

对于Python程序来说,使用Python或C编写的组件看起来都是一样的。正因如此,我们可以在一开始利用Python做系统原型,之后再将组件移植到C或C++这样的编译语言上,进而提升执行效率。而不需要效率的部分则可以不变。

数值计算和科学计算编程

Python被大量的应用于数值编程,这是个不被传统脚本语言含纳和考虑的领域,却逐渐成长为Python最具竞争力的使用案例。
NumPy:矩阵对象、标准数学库接口。这些代码都是用FORTRAN或C++编写的。

其他一些数值计算工具为 Python提供了动画、3D可视化、并行处理等功能。SciPy、ScientificPython。在数值领域这类重型算法代码,在PyPy中运行的不可思议的快,10到100倍。

更多内容:游戏、图像、数据挖掘、机器人、Excel等

pygame、cgkit、pyglet、PySoy、Panda3D:多媒体、游戏
PySerial:多平台通信
PIL及其分支(Pillow、PyOpenGL、Blender、Maya):图像处理
PyRo:机器人控制编程
NLTK:自然语言分析
树莓派(Raspberry Pi)和Arduino板上进行设备化
安卓、苹果系统的移动计算
PyXLL和DataNitro插件:Excel工作簿函数和宏编程
PyMedia、ID3、PIL/Pillow等媒体文件内容、元数据标签的处理
PyBrain神经网络和Milk机器学习工具包进行人工智能编程
PyCLIPS、Pyke、Pyrolog、pyDatalog进行专家系统编程
网络监管的zenoss
ReportLab、Sphinx、Cheetah、PyPDF等文档处理和生成
Mayavi、matplotlib、VTK、VPython:数据可视化
xml库、xmlrpclib模块:XML解析
json、csv模块
Orange框架、Pattern包、Scrapy:数据挖掘

尽管应用广泛,但很多领域都是作为对C等编译语言的集成,作为一种支持集成的通用型语言,Python的应用极其广泛。

Python如何开发并获得支持

作为一个流行的开源系统,Python拥有一个很大且活跃的开发社区。
PEP:Python Enhancement Proposal,Python增强提案
PSF:Python Softare Foundtion,Python软件基金会
Python会议:O’Reilly的OSCON、PSF的PyCon

Python有那些技术上的有点

面向对象和函数式

Python是一种面向对象的语言:类模型支持多态、运算符重载、多重继承等高级概念。
Python既支持面向对象编程(语句为基础),也支持面向过程编程(类为基础),又对函数式编程(生成器、推导、闭包、映射、装饰器、匿名lambda函数、第一类函数对象,是对本身OOP工具的补充和替代)。

开源免费

Python起初的创始者:Guido van Rossum,Python社区公认的“终身的慈善独裁者”(Benevolent Dictator for Life,BDFL)
Python之父Guido Van Rossum宣布加入微软

可移植

Python的标准实现是由可移植的ANSI C编写的,除了语言解释器本身以外,自带的标准库和模块在实现上也都尽可能的考虑了跨平台的移植性。Python程序自动编译成可移植的字节码。,这些字节码在兼容版本的Python的平台上运行的结果都是相同的。
搭配之前所提的可移植的tkinter GUI工具,使得Python程序无需修改,即可在所有主流GUI桌面平台运行用户图形界面。

功能强大

从语言特性的角度来看,Python是一个混合体,它丰富的工具集使他介于传统的脚本语言(Tcl、Scheme、Perl)和系统语言(C、C++、Java)之间。
Python提供了所有脚本语言的简单和易用性,并且具有那些在编译原因中才能找到的高级软件工程工具。不像其他脚本语言,这种结合使Python在长期大型的开发项目中十分有用。

动态类型

Python在程序运行过程中跟踪对象的类型,不需要代码中进行关于复杂的类型和大小的声明。没有类型和变量声明这种做法。因为Python代码不约束数据的类型,他往往自动的应用了一种广义上的对象。

泛类型:动态参数类型

虽然好用了,但是跑得慢了,相对C,C声明了变量的类型,所以C的数据拿来即用。但是Python多了分析变量的步骤,所以慢了。也因此PyPy固化了这部后,之后运行就可以不再需要这一步而提高了运行效率。

自动内存管理

Python会自动分配和回收内存,不再需要使用者考虑内存的管理。
而对于一些关系到内存级别的操作,可以借用专用的库来实现。

大型程序支持

为了能建立更大规模的系统,Python包含了模块、类、异常等工具,这些工具允许你把系统组织为组件,使用OOP重用并定制代码,处理事件和错误。而Python的函数式编程工具提供了实现相同目标的其他方法。

内置对象类型

Python提供了常用的数据结构作为语言的基本组成部分:列表(list)、字典(dictionary)、字符串(string)。他们灵活易用,可以根据需求扩展或收缩,可以任意的组织复杂的信息等。

内置工具

对以上对象的处理,Python自带了许多强大的标准操作:拼接(concatenation)、分片(slice)、排序(sort)、映射(mapping)等

库工具

为了完成更多特定的任务,Python预知了许多预编码的库工具,从正则表达式到网络都支持。

第三方工具

众多的第三方工具:COM、图像处理、数值编程、XML、数据库访问等

除了这些,Python保持了相当简洁的语法和设计。综合这一切的到的就是一个具有脚本语言所有可用性的强大编程工具。

可混合

如上,可与C集成、替换等

相对简单易用

Python可立即执行程序,形成一种交互式编程体验,在不同情况下快速调整,修改代码后里立即能看到程序改变后的效果。

Python曾经被称为“可执行伪代码”

相对简单易学

学习Python技能即学即用(简洁高效),又能稳步提升(平滑的学习曲线),还能接触到每个应用程序领域的编程技能(应用广泛)。
即可深度学习的程序员,又可学了就用的办公人员,又可是计算机爱好者。
尽管Pyton还是有很多高级编程工具,但不论初学者还是行家来说,Python的核心语言精髓仍是相当简单的。

以Monty Pyhon命名

Python的最初创作者是Monty Python的粉丝。BBC在20世纪70年代喜剧《Monty Python’s Flying Cricus》的制片方。
Python的一些灵感正是来自于这系列的喜剧。

Python和其他语言比较起来怎么样

比Tcl强大:Python强有力的支持“大规模编程”
比Perl更具有可读性:Python有着简洁的语法和简单连贯的设计,更具有可读性,更易于维护,有助于减少bug
比Java和C#更简单易用:Python是一门脚本语言,但Java和C#从C++这样更加大型的OOP系统语言中集成了许多语法和复杂性
比C++更简单易用:Python代码比等效的C++代码更简单,长度只有其五分之一到三分之一
比C更加简单和高级:Python远离底层硬件架构从而降低了代码复杂性,拥有更好的组织结构,并比C更加友善
比Visual Basic更强大,用途广泛,也更具备跨平台特性
比PHP、golang更易懂且用途更广,不仅是构建web站点
比JavaScript更强大、用途更广。不是牢牢的束缚与web开发
比Ruby更具有可读性,更为人们所接受
比Lua更成熟,受到更广泛关注。Python更加庞大的特性集合和更加扩展的库支持,比Lua(一门和Tcl一样的嵌入式“胶水”语言)更加宽广的视野
比SmallTalk、Lisp、Prolog更不晦涩,不仅仅是函数是语言

Pyhon比目前任何可用的脚本或编程语言都划得来。除非你的应用要求最简单的性能,Python往往是C、C++和Java等系统开发语言的一个不错的替代品。能够实现相同的目标,却会减少很多编写、调试和维护的麻烦。

习题

1、软件质量、开发者效率、程序可移植性、标准库支持、组件集成、编码乐趣。前两者是人们选择Python的主要原因
2、谷歌、工业光魔、CCP游戏、Jet Propulsion Labs、Maya、ESRI等,今天从事软件开发的所有组织几乎都以某种程度使用着Python,无论是长期战略产品开发,抑或测试、系统管理这样的短期策略任务都有Python的身影。
3、Python的主要缺点是他的性能:它不像C和C++这类常规地编译语言运行的那么快。另一方面,他的绝大多数应用已经足够快了,并且典型的Python代码运行起来速度接近C,因为Python解释器中调用链接了C代码。如果速度要求很苛刻的话,应用的数值处理部分可以采用编译好的扩展以满足应用需求。
4、python为何要用spam eggs作为例子? - 三天泪的回答 - 知乎

Python是工程,不是艺术

“你可以用Python做一切用Perl能做到的事,但是,做好之后,还可以阅读自己的程序代码”
Python出自训练有素的数学家之手,他似乎自然而然的创造出来一门具有高度一致性和连续性的正交语言。
Perl语言由一位语言学家孕育,他创建了一种接近自然语言的编程工具,并拥有者上下文敏感性和广泛变化性。就像著名的Perl所说的格言:“完成的方法不止一种”。一个人的Perl代码可能和另一个人的完全不同,这使得代码没有良好的可读性,导致团队软件开发的灾难。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值