什么是Pythonic?

孟自强
2023-12-01

震惊,这篇文章的阅读量竟然远远超过我写的其他很多好文章,可见现在Python的学习有多么火热了。

因为是早期写的文章,质量很一般,看到这么多访问着实惶恐,现在本人主要致力于前端学习,但是Python作为带我入门的语言,自然还是十分喜欢的, 随着越学越多,对于语言风格其实有了更深的认识,推荐大家不要局限于一种语言的设计风格,如果真的爱,请博采众长,以集大成。

下面是原文,基本没有修改过,小白看个新鲜,行家看个热闹即可。


如果你也听说过著名的“the zen of python”,如果你和我一样小白到写的代码总是乱七八糟,如果你也想了解一下真正“Pythonic”的代码是什么样子的话,不妨看下去。

pythonic,简单的翻译就是python风格,pythonic code,就是说你写的代码要带有浓厚的python规范和python风格。往规范了说,PEP 8是你写出规范代码不得不读的文章,至于往python风格来说的话让,嗯,让我们先看看“the zen of python”中的几句话:

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.

渣渣翻译:美丽胜过丑陋,嗯这不废话么,啥是美丽啊;清晰胜过不清晰,嗯,意会吧,言传不了;简单好过复杂,这倒是很好理解;复杂胜过更复杂?后面这个复杂应该有混乱的意思了;平滑胜过嵌套,间隔胜过紧凑,感觉这都是为了可读性服务的呀。
说了这么多,还是不知道pythonic的代码是啥样子的,于是,看例子吧!

例一:

对一个数组里的每个元素做个简单处理:

i = 0
while i < len(list):
   easy_process(list[i])
   i += 1

没毛病,够python吗?显然不够,我们都知道更python的应该用for i in range():

for i in range(len(list)):
    simple_process(list(i))

这样够python了吧?很遗憾,推荐写法是下面这样:

for element in list:
    simple_process(element)

看起来确实舒服呀有没有!

例二:

其实python设计之初还是为了方便编程,可读性高,但是为了丰富这门语言,各种各样复杂的语法还是不可避免的诞生,就比如常见的切片操作,也许熟练了以后你能很快的说出L[-1:3:-2],L[-2::-2],L[:2:2]的不同,但是这终归不算一件很轻松的事。

例三:

交换a,b,python:

a,b = b,a

当然这不是python的特性,只是说这样的写法是可以的,典型的JS:

{a, b} = {b, a}

至于条件表达式,列表推导式,打包和解包,这在我为时不久的学习时间内已经养成习惯了,当然不仅仅是语法的简洁,这样的写法还可能节约储存内存,最典型的例子就是列表推导式类的解析语法。

sum(k*k for k in range(1,n+1))

例四:

with open('###.txt') as f: 

打开文件你有使用过这种方式打开吗?

print(''.join(words))

拼接字符你有使用这种方式拼接吗?
很多语言都支持的装饰器为什么再python中广泛应用呢?

这些都只是pythonic的冰山一角,从规范的PEP8到pythonic的设计方式,你离pythonic coder还有多远?

 类似资料: