那些被忽视的Python核心功能...

作者 | Erik van de Ven
编译 | 王瑞平
最实用、最简单、最优美...近些年,大家学习Python/ target=_blank class=infotextkey>Python的热潮从未消退;无论是数据分析还是科学计算都少不了Python的身影 。
Python也没有让人失望,JAVA用100行代码写出的程序,用Python十行就能搞定!
当你要说Hello World时,C语言、Java、Python分别是这样的:

那些被忽视的Python核心功能...

文章插图
图片
一目了然,Python只需一行!
虽然Python非常容易学习,但是许多实践者只触及到它的表面,而忽视了深入研究这门语言更高级、更强大的方面,而正是这些被忽视的方面使它如此独特和强大 。
                                                                  ——节选自《Fluent Python》
如果你的目标是成为一名经验丰富的Python程序员,你一定想了解的更多 。因此,让我们共同了解下你没听过的Python核心功能,先从最简单的排列与组合开始...
一、功能一:排列与组合你可以组合不同的for循环,输出排列、组合和笛卡尔积等 。
1.排列举个例子:当你在排列函数中输入{[1,2,3],2}时,会输出如下结果:
那些被忽视的Python核心功能...

文章插图
图片
2.组合当你在组合函数中输入(‘ABC’,2)时,输出的排列如下:
那些被忽视的Python核心功能...

文章插图
图片
3.笛卡尔积笛卡尔积是数学中的一种运算,用于求两个集合中所有可能的有序对 。
当我们用笛卡尔积计算Python时,结果是这样的:
那些被忽视的Python核心功能...

文章插图
图片
二、功能二:可变的参数默认值现在,开始增加难度...
当你每次调用fib_memo函数却不为memo参数赋值时,它将自动使用定义该函数时的原始值,公式和代码如下:
那些被忽视的Python核心功能...

文章插图
图片
由于在Python中,默认参数是可变的,你也可以像在“for循环”中一样在单个脚本中多次执行函数,每次执行都能自动增加要计算的斐波那契数,而不会超过“最大递归深度”限制,因为memo可持续扩展 。
*重要提示:请记住,尽管可变的默认参数(如上所述)可以减少代码,但它可能产生难以解决的bug 。有些人将其判定为“陷阱”,而不是功能 。因此,你仍需要坚持Python中所透露出的禅意:显式优于隐式 。
就像Hacker news中指出的那样:if n not in memo比if not n in memo更容易读取,但是二者输出结果相同 。
三、功能三:海象运算符下面,再来讲讲比较有趣的“海象运算符”...
“海象运算符”是在Python 3.8版本中引入的赋值表达式运算符,用于在表达式中进行赋值操作,其符号为“:=” 。这个符号有点像海象的眼睛和獠牙(因此被称为「海象运算符」) 。
它可以被翻译成英文“whale calculus”,是一种基于单词语法规则的特殊运算符,用于定义表达式和一系列操作步骤的语言建模方式 。
那些被忽视的Python核心功能...

文章插图
图片
显然,用Python,赋值和检查返回值是否包含真值变得更容易了:
那些被忽视的Python核心功能...

文章插图
图片
四、功能四:单星号(*)和双星号(**)使用(*)可以在将参数或关键字参数传递给函数之前解压缩,让我们在如下代码中使用:
那些被忽视的Python核心功能...

文章插图
图片
当调用sum_numbers函数而不解包my_numbers时,会引发"TypeError",因为该函数需要输入两个单独的参数才能输出结果 。
但是,通过使用(*),我们可以解压缩my_numbers函数中的值,并将它们作为单独的参数进行传递,从而产生正确的输出 。
这种解包技术不仅适用于元组和列表,也适用于字典 。
当关键字作为参数时,我们可以使用双星号(**),以如下代码为例:
那些被忽视的Python核心功能...

文章插图
图片
除解压缩序列以将其作为参数传递给函数外,你还可以使用它来创建新序列,例如:
那些被忽视的Python核心功能...


推荐阅读