20

为了更好的代码:12个Python小窍门

 4 years ago
source link: http://developer.51cto.com/art/202007/621294.htm
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

本文转载自公众号“读芯术”(ID:AI_Discovery)。

使用和学习Python的人不在少数,但是真正掌握了解这门语言的人并不多。你了解最新的Python功能和技术吗?这12个小技巧能帮助你提高代码质量。

8eddf07ec47e8a0e9377620eed5648cf.jpg-wh_651x-s_3929672425.jpg

1. F-Strings

F-Strings提供了一种简便的方法,可以将Python表达式嵌入字符串文本中进行格式化。首先,定义print语句中的会用到的两个变量:name和age。

name = "Pavel" 
age = 23 

为了不处理字符串连接或在print语句中使用逗号,可以使用Python3.6升级版字符串格式化法“f-Strings”。只需在大括号内有变量或表达式的字符串前面放一个小写或大写字母“f”即可。

9cc8c0ccbd6c2eac7fcd2cb75d0886f5.jpg

F-Strings是一种很棒的格式化字符串新方法,此法得出的结果可读性更强、速度更快、格式更简洁、更不容易出错。

2. 查找任何对象的大小

默认的sys模块包含一个getsizeof函数,该函数接受一个对象并以字节为单位返回其大小。该对象可以是任何类型。例如:

4304840ad0f38ae14ac0b8c228c423b7.jpg

仅计算直接归因于该对象的内存消耗,而不计算它所指对象的内存消耗。再来看另一个例子:

723cd0f15681955db455b9ffc06e3031.jpg

3. 原地交换变量

在许多其他编程语言中,只有通过定义一个额外的temp(临时)变量才能交换两个或以上变量的值。假设想交换x和y:

temp =  x 
x =  y 
y =  temp 

Python用一种简单的单行结构来交换变量,类似于将值赋给一行中多个变量的概念。以下代码与上面代码相同,但没有使用任何临时变量:

0fd8a04cbbbf6ad943ec4959a8ca895b.jpg

4. 比较运算符的链接

通常要检查两个以上的条件时,必须使用逻辑运算符,例如and/or:

if a < b and b < c: 

在Python中,有一种更好的方法可以使用比较运算符链接来编写它。运算符的链可写为:

if a < b < c: 

例如:

61c08bd3c4b835cc13fe2832b3cda49f.jpg

5. 列表理解

列表理解是更常用、更巧妙的列表制作方式。不需要创建空列表并将每个元素添加到末尾,只需按照以下格式同时定义列表及其内容:

new_list = [expression for item in iterable (if conditional)] 

例如:

7528e9950c4d96da0084dd305614045a.jpg

另一个例子(有条件):

061a7862b21aa295e4502b16bd8ce086.jpg

6. 字符串乘法

在Python中,不仅可以乘以数字,还可以乘以字符串。例如:

b8cbb8853a618614984603925d33b000.jpg

7. 在一行中分配多个变量

可用逗号分隔变量和值,从而把多个值分配给各个变量:

c365cd7cbbc20f12f21fa92fac45bc70.jpg

这在对序列(例如列表或元组)解构/解包时也同样适用,并且是将序列的元素更巧妙地分配给各个变量,因为不需要使用循环或单独索引序列中的每个元素。

8. 参数解包

当需要对列表或元组中的参数进行解包以进行需要单独位置参数的函数调用时,Splat或Scatter运算符* 有时能发挥作用。

例如,内置的range()函数需要单独的开始和停止参数。编写函数调用时,可以使用* 运算符将参数从列表或元组中解包:

让我们定义一个简单的列表:x = [1,2,3,4,5]。 

解包运算符的一个常见示例是使用 print:

print(*x) // Result: 1 2 3 4 5 

这只是打印出列表中的每个元素,这些元素以空格分隔,因为解包运算符接受了列表中的所有元素,并将它们作为参数传递,因此上面代码转换成print(1,2,3,4,5)。

这个Python技巧在函数中经常使用,以将方法调用接收到的所有参数‘打包’到单个变量中。例如:

a54604fb63c3e2c8b3cdcd33896b8d6f.jpg

上面的函数func可以接受无限数量的参数(args[0]和args[1]将分别提供第一个和第二个参数)。

以类似的方式,字典可以使用**运算符传递关键字参数。来定义一个名为 person的Python字典:

person = {"name": "Paul", "age":23, "location": "London"} 

你可以使用**运算符将字典传递给函数。传入字典将把keys分解为函数关键字参数,然后将该值作为为该参数传递的实际值。例如:

b9e0e0168fe7072f041236451c6a260c.jpg

9. 创建Enum

Enum是Python中用于创建枚举的类,枚举是附加到唯一常量值的一组符号名。

为了创建Enum,必须创建一个类,该类是所需Enum的名称。剩下要做的就是列出变量并将其设置为所需的值:

e51254ed7adc1c148ebcb49c0ff845bb.jpg

以访问枚举成员Paul为例,只需执行Person.Paul,它将返回0。在Python中,可以通过以下方式简化上述示例:将变量彼此相邻列出并将它们设置为等于range函数:

05d186433ec84e6011b1beffff9153f5.jpg

10. Enumerate

通常在遍历列表时,不仅要访问列表中所有的索引,还要访问实际元素。来定义一个字符列表:

x = ['a', 'b', 'c'] 

与其以标准方式遍历它,不如访问元素和索引:

824e39e563f33d84d2f42b2085b156ce.jpg

使用Enumerate:

Enumerate是Python的内置函数,它使我们可以循环一个可迭代对象而且有一个自动计数器。实际上它将列表中的每个元素与相应的索引配对,大多数新手,甚至一些高级程序员都不了解它。

30961c94d9446b4e60fd105218838150.jpg

可将变量 i和v更改为喜欢的变量名称。例如,for index, count in enumerate(x).。

11. Help函数

Python help函数用于查找模块、函数、类、关键字等的帮助文档。只需在help函数中传递一个对象即可检索该对象的帮助文档:

250c079e6674e65056194c0a2cbd02df.jpg

12. Dir函数

dir()是Python3中一个强大的内置函数,它可返回任何对象(即函数、模块、字符串、列表、字典等)的属性和方法的列表。在几乎没有关于模块的信息时,这非常有用,有助于更快地学习新模块。例如:

7e154c553deeb3e9a9b9f0b3f667320c.jpg

dir()通常用于调试目的。dir()能够列出传递参数的所有属性,在分别处理许多类和函数时非常有用。

编码之路还很漫长,进步要在一点点的积累中实现。

9fb08490d5201878d21749b8f5ef9228.jpg


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK