程序员必知的 20 个 Python 技巧

作者 | Duomly

链接:https://dev.to/duomly/20-useful-python-tips-and-tricks-you-should-know-3h8c

程序员必知的 20 个 Python 技巧

Python是一门流行且应用广泛的通用编程语言,其应用包括数据科学、机器学习、科学计算等领域,以及后端Web开发、移动和桌面应用程序等方面。许多知名的公司都使用Python,如Google、Dropbox、Facebook、Mozilla、IBM、Quora、Amazon、Spotify、NASA、Netflix、Reddit等。

Python是免费且开源的,与它有关的大多数产品也都是。此外,它拥有庞大、专注且友善的编程者和使用者社区。

它的语法设计目标就是简单、易读且优雅。

本文将向你展示20条非常实用的Python使用技巧。



Python之禅


Python之禅(又名PEP20)是由Tim Peters编写的一小段文字,文中展示了设计和使用Python的指导原则。你可以在Python网站上找到这段文字,也可以在控制台或Jupyter notebook中通过一条语句来显示这段话。



链式赋值


如果需要让多个变量引用同一个对象,则可以使用链式赋值:

非常有逻辑且优雅,对吧?

链式比较

多个比较语句也可以合成一个Python表达式,只需将多个比较运算符连起来即可。下面的表达式只有在所有比较都成立时返回True,否则返回False:

这个表达式相当于(2 < x)且 (x ≤ 8) 且 (x ≤ 8),但更为紧凑,而且只需执行一次x求值。

如下写法也是正确的:

甚至可以将多个比较连起来:



多重赋值

你可以使用元组解包,在一条语句中给多个变量赋值:

注意第一条语句中的2, 4, 8相当于一个元组(2, 4, 8)。

更高级的多重赋值

Python的多重赋值远不止于普通赋值。赋值左右两侧的元素数量甚至可以不一样:

在这段代码中,x对应于第一个值2,因为2是首先出现的。z是最后一个,所以取最后一个值8。y以列表形式取中间的所有值,因为它带有星号(y*)。

交变量

利用多重赋值可以精确、优雅地交换任何两个变量,而且无需引入第三个变量:




合并字典

合并两个字典的方法之一就是将它们解包到一个新的字典中:





连接字符串

如果需要连接多个字符串,每个字符串之间使用同一个字符或同一组字符来连接,则可以使用str.join()方法:



高级遍历

如果需要遍历一个序列,同时还需要每个元素和相应的索引,则可以使用enumerate:

每次遍历你都会获得一个元组,其中包括索引值和对应的元素。

反向遍历

如果你需要反向遍历一个序列,则可以使用reversed:



元素结合

如果你需要将来自多个序列的元素结合起来,可以使用zip:

你可以遍历返回的zip对象,或者将其变成一个列表或元祖。

矩阵转置

虽然在处理矩阵时人们通常会使用numpy(或类似的库),但利用zip也可以实现矩阵转置:



唯一值

如果元素的顺序不重要,那么从列表中去除重复值的方法是将其转换成一个集合,以获得唯一的值:



序列排序

默认情况下序列按照第一个元素的顺序排序:

但是,如果你希望按照第二个元素(或其他元素)排序,则可以使用key参数和适当的lambda函数作为第二个参数:

反向排序时也使用类似的方法:



字典排序

可以用类似方法,对字典的.items()方法返回的键值对进行排序:

它们按照键的顺序进行排序。如果你希望按照值排序,则应该指定相应的key参数。反向排序也类似:



格式化raw字符串

PEP498和Python 3.6引入了“有格式字符串”的概念,或者称为“f字符串”。这种字符串内部可以嵌入表达式。字符串可以同时作为raw字符串和有格式字符串使用,只需使用前缀fr:



获取当前日期和时间

Python有一个内置的datetime模块,非常适合各种涉及到日期和时间的任务。方法之一.now()能够返回当前日期和时间:



获取最大(或最小)元素的索引

Python没有提供直接获取最大(或最小)元素索引的函数。不过,至少有两种方法可以优雅地实现这一点:

如果有两个或多个元素都是最大值,那么该方法返回最后一个的索引:

如果想获取第一个,则可以对上面的语句稍作改动:

另一种方法可能更优雅:

如果想获得最小元素的索引,则只需用min替换上面的max。

获取笛卡尔积

内置的itertools模块提供了许多非常实用的类。其中之一就是product函数,你可以通过这个函数来获得笛卡尔积:



矩阵乘法操作符

PEP465和Python 3.5引入了专用的矩阵乘法运算符@。你可以在自己的类中实现matmul、rmatmul和imatmul来支持这个操作符。使用该操作符进行向量或矩阵乘法非常优雅:




分享到:


相關文章: