首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

每个Python开发人员应该拥有的6个实用技巧

Python已成为一种流行的编程语言,因为它清晰,通用,易于学习,并且具有用于完成不同任务的大量有用的库。从Web开发到数据科学和网络安全,Python程序员的需求很高。

但是像所有编程语言一样,在Python中,一切都取决于您(程序员)。您可以决定代码看起来是专业还是丑陋。

幸运的是,Python具有大量内置功能,可以帮助您编写优雅,简洁和可扩展的代码,这正是专业程序员所期望的。

这是我最喜欢的一些技巧,我认为每个Python开发人员都应该知道。

1.清单理解

列表理解是Python的关键功能之一,可帮助您编写更简洁明了的代码。假设您要创建一个包含1到100的数字的数组。执行此操作的便捷方法是使用range()函数:

numbers = list(range(1, 101))

但是,如果您想做更复杂的事情,例如创建从1到100的正方形列表,该怎么办?在这种情况下,经典方法是使用for循环:

numbers = []

for i in range(1, 101):

numbers.append(i**2)

这是大多数编程语言支持的标准方式。但是幸运的是,在Python中,列表理解使事情变得容易得多。这是在列表理解模式下编写的相同代码:

numbers = [i**2 for i in range(1, 101)]

您可以使用列表推导将几个指令和表达式包装在定义列表的方括号中。它们比for循环更短,更优雅。在保持代码干净的同时,您还可以做更多的事情。例如,假设您有一个函数is_prime()来检查输入数字,如果它是质数则返回True。以下代码段通过将is_prime()条件添加到理解中来创建从1到100的素数平方的列表。

2.压缩

偶尔会派上用场的另一个Python功能是zip()函数。zip将两个或多个列表组合为一个变量。假设您已经收集了客户名称,他们的年龄和他们最喜欢的冰淇淋口味的列表。

customers = ['John', 'Natasha', 'Eric', 'Sally']

ages = [26, 31, 39, 22]

flavors = ['cherry', 'chocolate', 'strawberry', 'lemon']

使用zip(),您可以将所有三个列表合并为一个列表,其中每个条目都包含一个元组,该元组具有一个客户的名称,年龄和偏好。

combined = zip(customers, ages, flavors)

customers_ice_cream = list(combined)

压缩数据后,您的customer_ice_cream列表如下所示:

[('John', 26, 'cherry'),

('Natasha', 31, 'chocolate'),

('Eric', 39, 'strawberry'),

('Sally', 22, 'lemon')]

以下是压缩列表在循环中的使用方式:

for cust in customers_ice_cream:

print("{} is {} years old and likes {}".format(*cust))

输出如下所示:

约翰26岁,喜欢樱桃

Natasha今年31岁,喜欢巧克力

埃里克(Eric)今年39岁,喜欢草莓

莎莉22岁,喜欢柠檬

3.盘点项目

通常,您想知道某个值在列表中出现了多少次。例如,假设我们从在线调查中收集了1-10个评分列表。为了模拟这一点,我们将使用randint()函数生成一个从1到10的1,000个随机数的列表。

from random import randint

ratings = [randint(1, 10) for _ in range(1,1001)]

现在,我们想知道列表中包含多少个每个评分。一种方法是使用列表的内置计数功能。count()获取一个值,并返回该值在列表中出现的次数。

for i in range(1, 11):

print("{}: {} occurences".format(i, ratings.count(i)))

此代码产生以下输出:

1:95次

2:115次

3:111次

4:109次

5:出现81次

6:出现110次

7:出现80次

8:94次

9:出现98次

10:107次

但是,这仅在您事先知道列表中的值范围是什么的情况下才有效。如果您不知道可能的值,则可以使用set,它创建另一个列表中包含的唯一项的列表。例如,如果您有一个名称列表,并且想知道每个名称出现了多少次,则可以使用以下代码。

for name in set(names):

print("{}: {} occurences".format(name, names.count(name)))

另外,您可以使用Counter类,该类专门对列表中的值进行计数。

from collections import Counter

ratings_count = Counter(ratings)

for rating in ratings_count:

print("{}: {} occurences".format(rating, ratings_count[rating]))

Counter提供了一些附加功能,例如most_common()函数,该功能为您提供列表中出现次数最多的值。例如,以下代码将打印出三个最受欢迎的值:

for rating in ratings_count.most_common(3):

print("{}: {} occurences".format(*rating))

想要在国立总统府工作吗?他们正在寻找Python开发人员。

4.列举

有时,您希望在遍历列表时保持项目计数。假设您有一个客户名列表,并且想要列出他们及其索引号。这是一种实现方法:

for i in range(len(customers)):

print("{}: {}".format(i+1, customers[i]))

这将产生类似于以下内容的输出:

1:萨曼莎(Samantha)

2:玛拉

3:埃里克

4:詹姆斯

5:乔治

6:托尼

7:玛格丽特

8:史蒂文

尽管此代码有效,但它不是很好。注意索引和计数器之间的不匹配吗?幸运的是,Python有一个enumerate()函数,使您的索引跟踪代码更容易理解和令人赏心悦目。enumerate()接受两个参数,要枚举的列表和计数器的起始编号,并在循环的每一轮给出两个输出,即计数器值和列表项。这是用enume解决相同问题的方法。

for i, customer in enumerate(customers, 1):

print("{}: {}".format(i, customer))

好多了。

5.参数扩展

假设您有一个处理学生信息的功能:

def process_student_info(first_name, last_name, fav_topic, score):

print(first_name, last_name, fav_topic, score)

在许多情况下,要传递给函数的值包含在从数据库或文本文件填充的列表或字典对象中。在这种情况下,调用该函数会比较麻烦:

process_student_info(student[0], student[1], student[2], student[3])

幸运的是,Python的“参数扩展”功能使您可以将整个列表直接传递给函数。通过在列表名称的开头添加*,可以将其扩展为各个值,然后再将其提交给函数。

process_student_info(*student)

只要列表中的参数数量及其顺序与目标函数的参数相似,就可以使用列表进行参数扩展。如果不匹配,则会引发错误。

您还可以对字典使用参数扩展,在这种情况下,值的顺序无关紧要。您只需要具有与功能参数相对应的键即可。字典的参数扩展需要在对象之前使用**运算符。

student = {'last_name': 'doe', 'score': 89, 'first_name': 'john', 'fav_topic': 'calculus'}

process_student_info(**student)

使用字典扩展的好处之一是,如果您的函数具有默认参数,则在字典中省略它们不会引发错误。

6.类型注释

Python是一种动态类型的语言,这意味着如果您尝试混合具有不同数据类型的变量,它通常会找到一种解决差异的方法,或者如果无法解决,则会引发异常。但是这种灵活性也可能导致不可预测的行为。

假设您有一个将两个变量相乘的函数。

def mul(a, b):

return a * b

如果您在两个整数或浮点数上调用mul()-函数的预期用途-结果是可预测的。

a = 5

b = 6

print(mul(a, b))

输出:30

但是,如果您的变量之一是列表怎么办?

a = [1, 2, 4, 5]

b = 3

print(mul(a, b))

输出:[1、2、4、5、1、2、4、5、1、2、4、5]

该函数创建一个列表,该列表是该列表的三个串联副本。这显然不是您想要执行的操作。Python 3.6和更高版本提供了“类型注释”,该功能使您能够定义每个函数参数应采用的数据类型。这是带有类型注释的mul()函数的外观。

def mul(a: int, b: int):

return a * b

此格式明确指出mul()采用两个整数值。明确地说,类型注释不会阻止您以意外方式使用该功能。但是仍然有一些充分的理由使用它。

首先,定义数据类型是一种文档形式,使其他开发人员更轻松地遍历代码以了解函数中期望的数据类型(比较函数的带注释和未带注释的版本)。

但更重要的是,一些代码编辑器处理类型注释,并通过自动完成和类型错误等功能为您提供帮助。

Spyder IDE的屏幕快照,显示键入变量的自动完成功能。

总结

这是我最喜欢的Python技巧中的六个。使用它们将使您的代码简洁明了。随着Python在许多领域和机构中迅速成为事实上的编程语言,拥有一套良好的最佳实践将确保您可以成为开发团队中富有成效的成员。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201107A00FW800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券