python语言风格与设计哲学

python语言风格与设计哲学_第1张图片

文章目录

  • python所属语言类别
  • python编码风格
  • 设计哲学
  • 基本思想
  • 编写代码的八荣八耻
  • 内置电池

python所属语言类别

python语言风格与设计哲学_第2张图片
语言类别主要分为以下四种

  • 静态强类型
  • 静态弱类型
  • 动态强类型
  • 动态弱类型

python编码风格

对于Python,PEP 8 已经成为大多数项目所遵循的风格指南;它促进了一种非常易读且令人赏心悦目的编码风格。每个Python开发人员都应该在某个时候阅读它;以下是为你提取的最重要的几个要点:

  • 使用4个空格缩进,不要使用制表符。

  • 4个空格是一个在小缩进(允许更大的嵌套深度)和大缩进(更容易阅读)的一种很好的折中方案。制表符(TAB键)会引入混乱,最好不要使用它

  • 换行,使一行不超过79个字符。这有助于使用小型显示器的用户,并且可以在较大的显示器上并排放置多个代码文件。

  • 使用空行分隔函数和类,以及函数内的较大的代码块。

  • 如果可能,把注释放到单独的一行。

  • 使用文档字符串

  • 在运算符前后和逗号后使用空格,但不能直接在括号内使用: a = f(1, 2) + g(3, 4)。

  • 类和函数命名的一致性;规范是使用 CamelCase 命名类,lower_case_with_underscores 命名函数和方法。始终使用 self 作为第一个方法参数的名称(有关类和方法,请参阅 初探类 )。

  • 如果你的代码旨在用于国际环境,请不要使用花哨的编码。Python 默认的 UTF-8 或者纯 ASCII 在任何情况下都能有最好的表现。

  • 同样,哪怕只有很小的可能,遇到说不同语言的人阅读或维护代码,也不要在标识符中使用非ASCII字符。

设计哲学

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 中所有的一切都是对象。

编写代码的八荣八耻

  1. 产品命名:以简单有趣为荣,以平庸难记为耻。

  2. 单个函数:以短小精悍为荣,以冗长费神为耻。

  3. 代码维护:以持续重构为荣,以停滞不前为耻。

  4. 编程风格:以运用风格为荣,以随意编码为耻。

  5. 程序设计:以开关上线为荣,以自信编码为耻。

  6. 接口定义:以用户易用为荣,以复杂歧义为耻。

  7. 断言分支:以实时报警为荣,以忽略分支为耻。

  8. 监控报警:以定时调整为荣,以放弃维护为耻。

内置电池

作者:豌豆花下猫 1

(一)

最近,我突然想到一个问题:相比其它语言,有哪些概念或习惯叫法是 Python 特有的?

在朋友圈提出这个问题后,我得到最多的回复是——Pythonic 。这个回复一点都不意外,名字中自带 Python 的,当然是特有的啦,与它相似的,还有 Pythonista

这两个词是啥意思呢?Python 圈内流传着一个说法“人生苦短,我用 Python”,人们相信存在着最佳的实践方式,采用这种方式是最美的、最高效的、最优雅的,也即是 Pythonic ,而这样做的人(或以此为追求的人)则自称是 Pythonista。这个称号是有别于 Pythoner 或者 Pythonist 的,简单地说就是,它更有追求、更有逼格。

除了以上两个,Python 还有众多独特的叫法,例如终生仁慈独裁者、装饰器、上下文管理器、推导式与生成式、鸭子类型、猴子补丁、魔术方法、GIL、内置电池,等等。它们有的并不是 Python 所原创或独有,但是却因为它才广为人知,它们在 Python 中是代表性的存在物。

这些内容都很有意思,本文唯独想聊聊它——内置电池 。
python语言风格与设计哲学_第3张图片

Batteries Included 这个叫法是 Python 特有的,它指的是 Python 拥有“内置电池”,也就是自带丰富多样的标准库,开箱即用,动力十足。

在《PEP 206 – Python Advanced Library》中,它提出了“内置电池的哲学”(Batteries Included Philosophy):拥有丰富而通用的标准库,无需用户单独下载就能立即使用。还说这使得 Python 领先于很多项目。

根据官方文档显示,Python 内置了 200 多个标准库,类型丰富多样,包括字符处理、数据类型、数值计算、文件处理、并发执行、网络通信、多媒体服务、图形界面、调试与开发、以及操作系统专有服务等等。

内置电池为 Python 提供了一种自给自足的能力(self-sufficient),在大多数情况下,用户不需要再去下载和安装单独的软件包,因此也免去一大堆的依赖问题的折磨。

某些编程语言中也有内置电池的概念,例如 Perl、Ruby、PHP等等,还有的语言会强调自己内置了强大的功能,例如 Erlang(一切皆进程)、Go(goroutine 机制)。

然而,这个叫法在 Python 中被叫得最响,也被推广到了技术生态中的其它项目里,几乎成了 Python 的专有名词。

在维基百科上搜索“Batteries Included”,该条目有 4 个解释,其中之一表明它是 Python 的 Motto ,这个词的意思是座右铭、格言、箴言,足见分量之重了吧。

内置电池做不到无所不包,因此需要所谓的第三方库,而 Python 也以三方库丰富而闻名。

PyPI 是 Python Package Index 的简称,即 Python 库索引,是一个用来管理三方库的项目,根据网站显示,目前有 18 万个三方库,以及它们的 135 万个发行版本。
python语言风格与设计哲学_第4张图片
就是说,Python 也拥有强大的外置电池,所以其实它是 双驱动 的。

双驱动本来相安无事,互为表里,但是,内置电池却遭到了越来越多的指责。

在今年 5 月的官方 PyCon 大会上,演讲嘉宾 Amber Brown 做了专门的分享,主要话题就是吐槽这内置电池正在“漏电”(Leaking):

  • 应用程序需要的不仅仅是标准库
  • 质量差,功能落后,代码过时
  • 标准库模块排挤创新

她的想法是移除一些标准库,例如 asyncio 及大多数的新特性,迁移到 PyPI,拥抱社区。这样做的预期效果是:内置电池会变得轻量小型化、高质量,同时三方库的生态系统也能得到进化。

其他开发人员对这个话题也进行了讨论。

标准库的维护团队表示,迁移部分模块的工作已经在展开了,但这需要经过仔细的设计,另外,不容忽视的是,迁移库到 PyPI 也要求测试配置的工作量。

还有人提出反对意见,认为精简标准库可能会破坏下游代码,而且有的企业用户只信任标准库而排斥三方库,这无疑会增加用户的负担。

我们的很多电子设备都是由电池驱动的,虽然它们的形式与材质各种各样,但是不可避免会遇到老化的问题(某种手机甚至会爆炸)。

Python 内置电池也不例外,可是,这电池的修理或替换,却不像物理世界的电池那般容易。

官方在十几年前提出了 PEP-206 与 PEP-3108,那时核心开发者们就发现有些标准库容易被入侵、设计不佳、有更好的替代库,因此推荐了很多款第三方库,以作为标准库的替代选项。这些年来,很多废弃的库已退出舞台,但更多的新库也加了进来,革命尚未成功。

今年 5 月,在 PyCon 大会引发的讨论之后,有开发者发起了 PEP-594,提议将“坏死的电池”(dead batteries)移出标准库。

目前,该 PEP 仍处于草案(Draft)状态,但已基本成为社区共识。

内置电池的哲学助力了 Python 发展壮大,攻城略地,成为最主流的编程语言之一。

然而它面临的挑战是:功能齐备与轻量可维的矛盾、官方支撑与社区分治的选择,因此,必然会走到今天的局面。

正如任何大型项目都可能遇到内存泄漏与性能退化的问题一样,Python 这个项目也是。剔除坏死的组织,精兵简政,革故鼎新,跟上时代,这些是 Python 核心团队正在做的事。

从去年末以来,我持续关注着 Python 最高决策层的选举,我恰好翻译了一篇文章《GIL 已经被杀死了么?》介绍了 GIL 的移除计划。

这些事件都表明着一件事:Python 充满活力,大蟒蛇蜕皮后,将会迎来新生。

我们何其幸运,正好作为见证者。

其它就不用多说了,重温一下这个伟大的口号吧——人生苦短,我用 Python!


  1. 豌豆花下猫:某985高校毕业生, 兼具极客思维与人文情怀 。个人公众号Python猫, 专注python技术、数据科学和深度学习。 ↩︎

你可能感兴趣的:(python)