用了Python这么多年,才发现Python还有这8个鲜为人知的语法

C++、Java大神Bruce Eckel几个月前在中国之行中,毫不掩饰的表达了对Python的偏爱:“坦白来讲,我最喜欢的语言是Python。每当我有问题需要被解决的时候我发现Python是最快可以给我结果的一个语言,所以我很喜欢,很享受Python。”

有数据显示,2017年在雇主发布的职位说明中,Python技能需求增速达到174%,居于首位。

用了Python这么多年,才发现Python还有这8个鲜为人知的语法

那作为通用编程语言,Python为何更胜一筹?

近年来,Python 更是横扫了各大语言排行榜。在世界脚本语言排行榜中,Python 强势登顶;在 TIOBE 编程语言排行榜中,Python 地位也在逐月攀升,越来越受广大开发者的欢迎。对比长盛不衰的 Java、C、C++,后起之秀 Python 深受好评。

用了Python这么多年,才发现Python还有这8个鲜为人知的语法

在 TIOBE 编程语言排行榜中,Python 也紧随 Java、C、之后,在开发者最喜爱的编程语言中位居第三名。

同样作为通用编程语言,不可避免要分出个一二三四来。那么 Java、C、C++ 以及 Python 比起来,谁能独领风骚?谁又略输一筹?

虽然目前来讲,Java 语言仍然傲视群雄,但是通过以上的对比可以发现,即使与 Java、C、C++ 这三个老牌语言相比,Python 也显得游刃有余,甚至隐隐有后来居上的意味。

所以,进入2018年之后,Python几乎成为编程语言界的“网红”,无论是使用人数还是受欢迎程度,都在各项榜单中飙升。5月,Python在PYPL指数榜中的超越Java,首次夺冠。

如果把PYPL编程语言人气指数的时间轴拉长,Python在近十几年的时间里,几乎一直都是“牛市”。

我们都知道Python容易入门且用途广泛,同时我们也可以用Python做一些意想不到的事情……这篇文章的目的在于帮助小伙伴们全面了解Python,仅此而已……

下面,我就来介绍下鲜为人知的一些Python语法:(这些代码玩玩就好,不要在线上写这样的代码,切记,切记.)

1、使用 lambda 表达式重写多行函数

众所周知 python 的 lambda 表达式不支持多行代码。但是可以模拟出多行代码的效果。

用了Python这么多年,才发现Python还有这8个鲜为人知的语法

虽然看起来很奇怪,但是上面的函数可以使用下面的 lambda 表达式函数代替:

用了Python这么多年,才发现Python还有这8个鲜为人知的语法

始终记着,永远别在生产环境写这样的代码 :)不然会被打死。

2、替换方法字节码

Python 阻止替换类实例中的方法,因为 python 给类实例中的方法赋予了只读属性:

用了Python这么多年,才发现Python还有这8个鲜为人知的语法

但是可以在字节码的层面上进行替换:

用了Python这么多年,才发现Python还有这8个鲜为人知的语法

注意! 这不仅对当前的实例有影响,而且对整个类都有影响(准确的说是与这个类绑定的函数)(译者注:此处应该是笔误,推测作者原意是:准确的说是与这个函数绑定的所有类),并且所有其他的实例也会受到影响:

用了Python这么多年,才发现Python还有这8个鲜为人知的语法

3、三元运算符

现代的 python 提供了更简便的语法:

b if a else c

也可以通过下面的方式重写:

(a and [b] or [c])[0](b, c)[not a]

顺便说一下,下面的变体是错误的:

a and b or cTrue and [] or [1] -> [1], but: [] if True else [1] -> []

4、通过列表推导式移除重复的元素.

让我们来把字符串 x = ‘tteesstt’ 转换成 ‘test’ 吧。

1、在原字符串中和上一个字符比较:

''.join(['' if i and j == x[i-1] else j for i,j in enumerate(x)])

2、把前一个字符保存到临时变量中:

用了Python这么多年,才发现Python还有这8个鲜为人知的语法

3、在新字符串中和上一个字符比较:

[(not r.endswith(i) and [r for r in [r+i]], r)[-1] for r in [''] for i in x][-1]

4、通过 reduce 函数和 lambda 表达式:

reduce(lambda a, b: a if a.endswith(b) else a + b, x)

5、通过列表推导式获得斐波拉契数列

把中间值保存在列表中

用了Python这么多年,才发现Python还有这8个鲜为人知的语法

把中间值保存到字典中:

用了Python这么多年,才发现Python还有这8个鲜为人知的语法

通过 reduce 函数和 lambda 表达式:

用了Python这么多年,才发现Python还有这8个鲜为人知的语法

速度最快的变体:

用了Python这么多年,才发现Python还有这8个鲜为人知的语法

6、使用列表推导式产生死循环

[a.append(b) for a in [[None]] for b in a]

7、列表切片技巧

复制列表:

用了Python这么多年,才发现Python还有这8个鲜为人知的语法

移除/替换 列表中的任意元素:

用了Python这么多年,才发现Python还有这8个鲜为人知的语法

在列表的开头添加元素:

用了Python这么多年,才发现Python还有这8个鲜为人知的语法

在列表的尾部添加元素:

用了Python这么多年,才发现Python还有这8个鲜为人知的语法

反转列表:

用了Python这么多年,才发现Python还有这8个鲜为人知的语法

8、让可变元素作为函数参数默认值

把可变对象作为函数参数的默认值是非常危险的一件事,并且在面试中有大量关于这方面棘手的面试问题。但这一点对于缓存机制非常有帮助。

  1. 阶乘函数:

用了Python这么多年,才发现Python还有这8个鲜为人知的语法

2.斐波拉契数列:

用了Python这么多年,才发现Python还有这8个鲜为人知的语法

总结:

Python由于语法简洁,功能强大,且在人工智能、大数据方面展现出效率优势,越来越受到欢迎。

Python把其他语言做了一个封装,调用其他语言做的包。很多的数据科学家其实是不希望学习过于复杂的编程语言的。把他们关于数据方面处理的智慧封装起来,通过Python来调用,这样会方便很多。这也是为什么Python这几年这么流行的原因。

人生苦短,我用Python。

人生苦短,你该好好学学Python了。

用了Python这么多年,才发现Python还有这8个鲜为人知的语法

相关推荐