Python使用面向对象编程(object-oriented programming,OOP)和构造,你可以像任何其它面向对象的语言一样使用它,譬如Java。
由Guido为该语言起的Python名字不是指蛇,而是意指电视喜剧片“蒙提·派森的飞行马戏团” (Monty Python's Flying Circus),因为他是一个超级粉丝。
01 了解Python
Python是一种通用编程语言,支持多种编程范式,包括以下流行的编程范式:
Python中具备很多OOP概念,包括类、对象、数据和方法。诸如抽象、封装、继承和多态的原则也可以使用Python来实现和展现。Python中有几个高级功能,包括迭代器、生成器、列表解析器、lambda表达式和几个模块(如itertools和functools),它们提供了遵循函数编程范式编写代码的能力。
Python的设计思想:简单而美丽的程序代码应该遵循更加优雅和易于使用的风格,而不是过早优化和编写难以解释的代码。Python标准库功能强大,具有从低级硬件接口到处理文件和处理文本数据的各种功能和特性。易于扩展和集成使得在开发Python时,可以轻松地实现与现有应用程序集成——甚至可以创建应用程序接口(application programming interfaces,API),以提供与其它应用程序和工具的接口。
Python过去数年在各领域的迅速发展应用,使得Python广受欢迎。如果在编写代码时不遵循简单、优雅和极简主义的Python正确原则,则代码被称为不是“pythonic”。编写好的Python代码有一种众人熟知的风格和约定,许多文章和书籍教导了如何编写pythonic式的代码。
在Python社区中,活跃用户和开发人员称其为Pythonistas、Pythoneers以及其它更多有趣的名称。因为Python及其整个生态系统一直是在积极的改进和发展,繁荣的Python社区使得这门语言更加鼓舞人心。
02 应用:何时使用Python
Python作为通用的多用途编程语言,能为不同领域构建应用程序和系统,并解决各种现实世界中的问题。Python自带有一个标准库,它包括大量对于解决各种问题有用的库和模块。除了标准库,互联网上还有数以千计的第三方库随时可用,它们用于鼓励开源和积极开发。官方存储库是Python的程序包索引(Python Package Index,PyPI),用于托管第三方库以及Python增强开发的工具。你可以访问https://pypi.python.org并查看各种程序包。目前,可以安装和使用的程序包超过80,000个。
Python可以用来解决大量问题,下面列出一些最受欢迎的应用领域:
尽管上述列表看起来显得非常强大了,但这些只不过是用Python可能解决的问题领域中的冰山一角。它还广泛应用于人工智能(AI)、游戏开发、机器人、物联网(IoT)、计算机视觉、多媒体处理以及网络和系统监控等几个领域,上面仅列举几例。
想要阅读Python在诸如艺术、科学、计算机科学、教育等不同领域所取得的一些广泛成功案例,可以访问www.python.org/about/success/。要了解使用Python开发的各种流行应用程序,请参阅www.python.org/about/apps/和https://wiki.python.org/moin/Applications,你一定会找到你已经使用的一些应用程序——其中一些是不可或缺的。
03 缺点:何时不用Python
你或许想知道它有什么缺点呢?确实如此,像任何工具或语言一样,Python有一些缺点,在这里我们将强调其中的一些缺点,以便你在Python中开发和编写代码时了解它们:
上述这些问题,其中许多并不是Python特有的,也适用于其它语言,所以不要仅仅因为前面说的几点就不再鼓励你使用Python了——但是,你在编写代码和构建系统时一定要记住它们。
04 Python实现和版本
Python有几种不同版本的实现方式,因为它们正在积极开发中,版本会定期发布。目前,有四种产品完备的、强大和稳定的主流Python实现:
我们首先建议你使用默认的Python版本,即CPython实现,只有当你真的有兴趣与其它语言(如C#和Java)进行接口并需要在代码库中使用它们时,才可以去尝试其它版本。
关于使用何种版本的Python尚有许多争论。最好的方法是你要考虑解决的问题以及需要使用的完整软件生态系统,从库、依赖关系和架构开始到实现和部署——同时也要考虑重用现有的旧代码库。
如前所述,两个主要的Python版本是2.x系列和3.x系列。它们是非常相似的,但是在3.x版本中出现了几个向后不兼容的变化,这导致在使用2.x的人和使用3.x的人之间产生了巨大迁移。PyPI上的大多数遗留代码和大部分的Python包都是在Python 2.7.x中开发的,因为所需的工作量不会很小,许多程序包的所有者没有时间或意愿将其将所有代码库移植到Python 3.x。下面是3.x系列中的一些变化:
要了解更多Python 3.0所引入的变更情况,请查看https://docs.python.org/3/whatsnew/3.0.html,上面的官方文档列出了变更。如果你将代码从Python 2移植到Python 3,关于什么变化会破坏你的代码,这个链接应该给你一个很好的解读。
对于选择哪个版本的问题,对此并没有绝对的答案。它纯粹取决于你正在试图解决的问题,现有代码和具有的基础设施,将来如何维护代码以及所有必要的依赖关系。
如果你正在开始一个全新项目,也非常清楚你并不需要任何仅依赖于Python 2.x的外部程序包和库,那么你可以继续使用Python 3.x并启动系统开发。但是,如果你有很多依赖于外部的程序包,并且可能会破坏Python 3.x或仅仅适用于Python 2.x,那么你就别无选择,只能坚持使用Python 2.x了。
05 Python句法和结构
在编写代码时你应该记住,Python代码有一个清晰的分层语法。任何大型Python应用程序或系统都由多个模块构建,这些模块本身由Python语句组成。每条语句就像系统的命令或指令,指挥它应该执行什么操作,这些语句由表达式和对象组成。Python中的所有东西都是对象——包括函数、数据结构、类型、类,等等。下图显示了这种层次结构。
▲Python程序层次结构
基本语句由对象、表达式组成,表达式通常使用对象并对其进行处理和执行操作。
对象可以是从简单数据类型和结构到复杂对象的任何东西,包括函数和具有自己特定作用的保留字。Python有大约37个关键字或保留字,它们有自己设定的作用和功能。下表详细列出了每一个关键字,包括你在代码中使用它们时应该会感到有用和方便的示例。
SI序号 | 关键字 | 说明 | 示例 |
---|---|---|---|
1 | and | 逻辑AND运算符 | (5==5 and 1==2) == False |
2 | as | 用作某些对象/引用的同义词 | with open('file.txt') as f |
3 | assert | 断言/检查表达式是否为True | assert 1==2, "Not Equal" |
4 | async | 函数声明为异步(协同:co-routine) | async def get_data(): |
5 | await | 用于调用协同程序 | return await get_data() |
6 | break | 跳出执行循环 | while True: |
break | |||
7 | class | 创建一个类(OOP) | class ClassifyText(object): |
8 | continue | 继续循环的下一个迭代 | while True: |
if a==1: continue | |||
9 | def | 定义一个函数 | def add(a,b): |
return a+b | |||
10 | del | 删除引用 | del arr |
11 | elif | Else-if条件语句 | if num==1: print '1' |
elif num==2: print '2' | |||
12 | else | Else条件语句 | if num==1: print '1' |
else: print 'not 1' | |||
13 | except | 捕捉异常 | except ValueError, e: print e |
14 | exec | 动态执行代码 | exec 'print "Hello Python"' |
15 | FALSE | 布尔值假 | False == 0 |
16 | finally | 在try-except之后的最后执行语句 | finally: print 'end of |
exception' | |||
17 | for | for循环 | for num in arr: print num |
18 | from | 从模块导入特定组件 | from nltk.corpus import |
brown | |||
19 | global | 声明变量为全局变量 | global var |
20 | if | if条件 | if num==1: print '1' |
21 | import | 导入现有模块 | import numpy |
22 | in | 对现有对象检查或循环 | for num in arr \ if x in y |
23 | is | 用于检查是否相等 | type('a') is str |
24 | lambda | 创建一个匿名函数 | lambda a: a**a |
25 | None | 表示无值或空值 | num = None |
26 | nonlocal | 在函数中修改外部的但非全局范围的变量值 | nonlocal var |
27 | not | 逻辑NOT运算符 | not 1 == 2 |
28 | or | 逻辑OR运算符 | 1 or 2 == 1 |
29 | pass | 用作指示空块的占位符 | if a == 1: pass |
30 | 打印字符串或其它对象 | print 'Hello World!' | |
31 | raise | 引发异常 | raise Exception('overflow') |
32 | return | 从函数退出后返回对象 | return a, b |
33 | try | 执行try语句的代码块,如果发生异常,执行except语句 | try: read_file() |
except Exception, e: print e | |||
34 | while | while循环 | while True: print value |
35 | with | 对表达式中的对象执行操作 | with open('file.txt') as f: |
data = f.read() | |||
36 | yield | 生成器功能,暂停并返回给调用者 | def generate_func(arr): |
for num in arr: yield num+1 |
▲Python保留字
有几点事项需要记住。关键字async和await仅在Python 3.5.x之后的版本中才可用。关键字exec和print是仅用在Python 2.x系列中的语句——从Python 3.x开始,它们是函数。关键字列表中的False、True和nonlocal是从Python 3.x系列开始引入。
Python语句通常指示解释器在执行语句时应该做什么。一串语句通常形成一个逻辑的代码块。包括函数和循环以及条件的各种构造有助于分隔和执行基于用户决策逻辑和设计的代码块。
Python也非常关注代码的可读性——因此缩进是Python代码的重要组成部分。默认情况下,Python不使用像分号的标点符号来表示语句结束。它还使用制表符或空格来显示和分隔特定的代码块,而不是像C、C ++、Java等语言中使用传统的括号或关键字。
Python接受空格和制表符作为缩进,通常的规范是一个制表符或四个空格来表示每个特定的代码块。未缩进的代码总是会引起语法错误,所以任何人在编写Python代码时都必须格外小心,要注意代码的格式和缩进。
Python程序通常围绕前面提到的层次结构。每个模块通常都是一个带有_init__.py文件的目录,该文件使目录成为一个包,它还可能有多个模块,每个模块都是一个单独的Python(.py)文件。每个模块通常都有类和对象,例如其它模块和代码调用的函数。所有互连的模块最终构成了一个完整的Python程序、应用或系统。通常,你可以通过在Python(.py)文件中编写必要的代码来启动任意的项目,并在项目因为添加更多组件而增大时要使其变得更模块化。
06 Python之禅
你或许想知道Python之禅究竟是什么,在你对Python很熟悉时,这是你应首先了解的事情之一。Python之美在于其简洁和优雅的风格。在程序设计中,Python有20条有影响力的指导原则或格言。资深的Python开拓者(Pythoneer)Tim Peters在1999年记录了其中19个,可以通过https://hg.python.org/peps/file/tip/pep-0020.txt访问它们,它们已作为Python增强建议(Python Enhancement Proposals,PEP)第20号(PEP 20)的一部分。如果你已经安装了Python,这些最好的原则部分内容可以随时通过在Python或IPython shell中运行以下代码来访问Python的Zen:
In [5]: 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之禅的19条原则,其作为复活节彩蛋被包括在Python语言本身中。这些原则是用简单的英语编写,即使你以前没有写过代码,很多都是很一目了然的,其中很多蕴含着笑话!Python专注于编写可读的、简单干净的代码。Python还旨在确保你能专注于错误处理和实现易于解释和理解的代码。
请你记住的一个原则是“简单胜过复杂”(Simple is better than complex),它不仅适用于Python,而且适用于在解决问题世界时所遇到的很多事情。只要你知道在做什么,有时一个简单的方法比一个更复杂的会更好。
关于作者:迪潘简·撒卡尔,Intel公司的数据科学家,研究领域涉及数据科学与软件工程,有着丰富的文本分析研究和工程方面的经验,出版过多本R语言和机器学习方面的书籍。
本文摘编自《Python文本分析》,经出版方授权发布。
延伸阅读《Python文本分析》
转载请联系微信:togo-maruko
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有