InfoQ 大会组织部祝您开工大吉!点击查看节中内容进度 >>> 了解详情
写点什么

爱上 Python 的五个理由

  • 2019-11-07
  • 本文字数:2564 字

    阅读完需:约 8 分钟

爱上Python的五个理由


关于 Python 有太多值得去爱的地方了,简单、干净、强大的 Python 语言让任何开发人员都有足够的能力在他们的软件开发生涯中充满自信,我们可以从中寻找到使用编程语言的乐趣,阅读本文,你会喜欢上使用 Python 的。


Python 中有很多我喜欢的特性。


Python 在 1998 年诞生,开始很长一段时间无人问津,但我一直在使用它。当时Perl在开源世界中非常流行,但是我从一开始就认定了 Python。我父母喜欢经常拿我之前说的话打趣我,我曾经说过“Python 将会成为很重要的语言”、“我未来将依靠 Python 找到一份工作”。过了一段时间,我的预言应验了。


这门语言有太多让人喜爱的地方了。以下是我如此热爱 Python 的 5 个最重要的原因(用反序的方式表述,以构建预期)。

5. Python 读起来像可执行的伪代码

伪代码是这样一种概念,它不遵循特定语言的确切句法和语法来编写编程逻辑。自从成为一名 Python 程序员以来,我已经几乎不怎么编写伪代码了,因为它的实际设计满足了我的需要。


即使您不太了解 Python 语言,也可以很容易地阅读它,这在很大程度上是由设计决定的。


Python 对代码格式中的空白规定是出了名的。空白对于任何语言都是必需的——它能够让我们区分出句子中不同的单词。大多数语言都有关于空格用法的建议或“最佳实践”,但是 Python 大胆地要求标准化。对我来说,这使得阅读代码并准确地看到它在做什么变得非常简单。


例如,下面是一个经典冒泡排序算法的实现。


def bubble_sort(things):
needs_pass = True
while needs_pass:
needs_pass = False
for idx in range(1, len(things)):
if things[idx - 1] > things[idx]:
things[idx - 1], things[idx] = things[idx], things[idx - 1]
needs_pass = True
复制代码


现在让我们将其与Java中的实现进行比较。


public static int[] bubblesort(int[] numbers) {    boolean swapped = true;    for(int i = numbers.length - 1; i > 0 && swapped; i--) {        swapped = false;        for (int j = 0; j < i; j++) {            if (numbers[j] > numbers[j+1]) {                int temp = numbers[j];                numbers[j] = numbers[j+1];                numbers[j+1] = temp;                swapped = true;            }        }    }    return numbers;}
复制代码


我知道 Python 需要缩进来表示块的嵌套。虽然我们的 Java 示例也很好地使用了缩进,但这不是必需的。花括号决定块的开始和结束,而不是间隔。因为 Python 使用空格作为语法,所以在其他代码中不需要开始{和结束}符号。


Python 还避免了对分号的需求,分号是使其他语言可读的语法规则。读起 Python 我感觉更舒服一些,它很像伪代码,有时会让我惊讶到都意识不到可运行的代码是什么样的了!

4. Python 有强大的原函数

在编程语言设计中,原函数是最简单的可用元素。Python 易于阅读这一事实并不意味着它是一种强大的语言,另一方面要归功于它对原函数的使用。我最喜欢的使 Python 既易于使用又高级的例子是它的生成器概念。


假设您有一个简单的二叉树结构,包含 value、left、right。您希望按顺序轻松地对其进行迭代。您通常会寻找“小”元素,以便在找到正确的值时立即退出。到目前为止,这听起来很简单。然而,有很多种算法可以对元素进行操作。


其他语言会让你写一个访问者,这样你可以在这个函数中判断“这是正确的元素吗?”你也可以在 Python 中这样做,但你也不必一定这样做。


def in_order(tree):
if tree is None:
return
yield from in_order(tree.left)
yield tree.value
yield from in_order(tree.right)
复制代码


这个生成器函数将返回一个迭代器,如果在 for 循环中使用该迭代器,那么它将只执行需要的部分,而不会执行全部。这是很强大的。

3.Python 标准库

Python 有一个很棒的标准库,其中隐藏了许多我以前不知道的宝贵内容,直到我花时间遍历了所有可用函数、常量、类型等等的列表,我才有了大体的了解。我个人比较喜欢的是 itertools 模块,但是更喜欢函数式编程模块(是的,Python支持函数式编程!)。


拿你的技术面试官开玩笑是很有趣的。例如,这有个应对FizzBuzz这个经典面试问题的小妙招:


通过网络搜索后会发现这并不是解决 FizzBuzz 的最直接的方法,但它确实很有趣!


除了趣味之外,itertools 模块以及 heapq 和 functools 模块都是 Python 实现中默认提供的很有价值的东西。

2. Python 的生态系统是庞大的

对于标准库中没有的很多东西,有一个巨大的生态系统来支持新的 Pythonista,从令人兴奋的包到专门针对该语言的文本编辑器插件都有。PyPi 上托管了大约 200,000 个项目(在撰写本文时),而且项目数量还在不断增加,每个人都可以使用这些工具:数据科学异步框架web框架,或者只是一些使远程自动化更简单的工具。

1. Python 社区很独特

Python 社区非常棒。它是最早采用行为准则的组织之一,首先是Python软件基金会,然后是PyCon。这是一个真正的兼具多样性和包容性的承诺:关于这个主题的博客文章和会议演讲是频繁的、深思熟虑的,而且 Python 社区成员也经常阅读。


虽然社区是全球性的,但在本地社区也有很多很棒的活动。当地的 Python 聚会是一个很好的去处,可以遇到聪明、有经验、乐于助人的人。许多聚会都会明确地为有经验的人预留一些时间,以帮助希望学习新概念或解决代码问题的新手。在我开始我的 Python 学习之时,我的本地社区花了很多时间来帮助我,我很荣幸能够继续回馈给新的开发人员。


无论您是参加本地社区会议,还是在 IRC、Slack 和 Twitter 上花时间与在线Python社区交流,我相信您都会遇到可爱的人,他们都希望帮助您成为成功的开发人员。

行动起来

关于 Python 有太多值得去爱的地方了,现在你知道我最喜欢的部分肯定是关于人的。


我在世界各地的社区中发现了善良、有思想的 Python 从业者,社区为有需要的人提供的投资数额令人鼓舞。除了我遇到的那些人之外,简单、干净、强大的 Python 语言让任何开发人员都有足够的能力在他们的软件开发生涯中充满自信,或者作为一个业余爱好者享受使用有趣的语言的乐趣。如果您对学习您的第一种或一种新语言感兴趣,请考虑使用 Python,并告诉我需要提供怎样的帮助,我会尽力而为。


英文原文:


https://opensource.com/article/19/10/why-love-python


2019-11-07 12:151973
用户头像
刘燕 InfoQ高级技术编辑

发布了 1112 篇内容, 共 484.5 次阅读, 收获喜欢 1962 次。

关注

评论

发布
暂无评论
发现更多内容

手写归并排序算法

实力程序员

程序员 C语言 排序算法 实力 编程实战

Discourse 云平台安装

HoneyMoose

有图,有代码,好理解,学习内存管理,mmap机制

奔着腾讯去

Linux 内存管理 Mmap 内存映射

Python调试神器之PySnooper

Jackpop

看完这篇 HTTPS 文章,再也不怕面试官这么问我了

HelloWorld杰少

https 对称加密 HTTP 非对称加密、 7月日更

Linux之diff命令

入门小站

Linux

声网Agora 教育 aPaaS 灵动课堂升级:UI与业务逻辑分离,界面、功能自定义更灵活

声网

在线教育 网络

现代分布式架构设计原则-互操作性

余朋飞

RESTful 接口 REST API

gopher成长之路(一):致三年前的我

非晓为骁

个人成长 架构师 全栈工程师 Go 语言 努力

🌏【架构师指南】分布式技术知识点总结(数据处理)

洛神灬殇

架构 数据 7月日更

从开发转到安全渗透工程师,是我做的最对的决定

网络安全学海

黑客 网络安全 信息安全 渗透测试· 漏洞分析

Java Flight Recorder - 事件机制详解

毕昇JDK社区

希望这是一篇让你对vim产生兴趣的文章

Jackpop

主存中存储单元地址的分配

朱华

计算机组成原理 计算机专业

为什么BAT的程序员能月薪 20k ,而你一个月只能拿 6K 的低保?差别就在这!

白亦杨

Java 编程 程序员

挖掘机哪家强?不找蓝翔找AI!

脑极体

四色建模法

escray

学习 极客时间 7月日更 如何落地业务建模

图计算之开局女朋友跑了

Zhuan

图算法 图计算 networkX GraphScope

Vue进阶(七十九):应用 postMessage 实现父子跨域通信

No Silver Bullet

Vue 跨域 7月日更 跨域通信

多用as少用强制类型转换

喵叔

7月日更

在线XML转HTML工具

入门小站

工具

优秀!百度技术官甩出SpringBoot全栈小册,GitHub星标92.5k

Java 编程 程序员

学习资源:图像处理从入门到精通

Jackpop

Rust从0到1-面向对象编程-Trait 对象

rust oop 面向对象编程 Trait Objects Trait 对象

Python OpenCV 图像的双线性插值算法,全网最细致的算法说明

梦想橡皮擦

Python 7月日更

好未来 x StarRocks:全新实时数仓实践,深入释放实时数据价值

StarRocks

数据库 flink 实时数仓 好未来 StarRocks

结构化流-Structured Streaming(八-上)

数据与智能

spark 查询引擎 结构化思维

为什么开发人员都不愿写 API 文档?

狐哥说技术

Postman Apifox 接口文档 接口管理

下一代5G计算终端,正在你我的案头苏醒

脑极体

Java的内存区域是如何划分的?

卢卡多多

内存 Java内存模型 7月日更

鉴释首席运营官赵科林:质量第一思维模式

鉴释

代码 安全编码

爱上Python的五个理由_AI_Moshe Zadka_InfoQ精选文章