来自 科技 2020-04-11 16:12 的文章

十大Python编程技巧,助你快速成为Python“大神”


十大Python编程技巧,助你快速成为Python“大神”


Python是初学者最受欢迎的编程语言之一,使其成为全世界的学校中使用最广泛的语言。

但是,学习Python并非易事。首先,你首先需要找到最佳的学习途径,这本身就很难。有成千上万种不同的Python课程和教程,都声称是最好的。

仅仅练习不是完美的,但是完美的练习才是完美的。这意味着你要保证始终遵循最佳编码习惯(对您的代码进行注释,使用正确的语法等),否则你最终可能会养成不良习惯,这可能会影响你将来的写代码的工作。

通用公约提供了所有的可维护性、清晰度、一致性,也为良好的编程习惯奠定了基础。它没有做的是坚持要你违背自己的意愿,这就是Python!--2001–06–16,Tim Peters在comp.lang.python上是这样介绍Python的。

在本文中,将介绍十大Python编程技巧,以帮助你快速有效地使用Python进行编程!

1.可读性很重要

编写的程序必须能够让人能够读懂,并且能让计算机执行。--哈尔·阿伯森

首先,请遵循一些编程规范,让程序易于阅读。编程规范是经验丰富的程序员在编写其代码时遵循的规律。没有比忽略规范更快捷的方法来表明你是“新手”。其中的一些规范是特定于Python,其他规范则是由计算机程序员用在其他计算机语言中。

十大Python编程技巧,助你快速成为Python“大神”


从本质上讲,可读性是一种特性,它指定另一个人可以更加容易地理解你代码的某些部分(而不是你个人!)。

举例来说,我并不习惯用垂直对齐方式来写,也不用打开定界符来对齐函数的参数。

# No, to avoid: 
func = long_function_name(var_one, var_two,
var_three, var_four)
#Yes,
func = long_function_name(var_one, var_two,
var_three, var_four)

我们经常做的另一件重要事情是类似于我们以前看过或写过的程序,这就是为什么我们接触可读程序对学习编程很重要的原因。

2.避免无用的条件

通常,一段非常长的判断条件的语句:if & elif & …. & else 是需要重构代码的标志,这些判断条件让你的代码冗长而又难以解释。有时它们很容易被替换,例如,我曾经做过以下事情:

def f():
if condition:
return True
else:
return False

该函数返回一个布尔值,那么为什么还要使用 if 块 呢?正确的做法是:

def f():
return condition

在Hackerrank挑战中,给出一个年份,你需要编写一个函数来判断该年份是否是闰年。在公历中,必须考虑三个条件来确定是否是闰年:

该年可以整除以4,即是闰年,除非:年份可以平均除以100,不是闰年,除非:年份也可以平均除以400,即是闰年。

因此,在这个挑战中,你需要忘了 if else,只是做到以下几点:

def is_leap(year):
return year % 4 == 0 and (year % 400 == 0 or year % 100 != 0)
3.充分利用空白切勿混用制表符和空格函数之间的换行符班级之间有两个换行符在字典,列表,元组,参数列表中的参数之后在字典中的“,”之后以及在字典中“:”之后但在其之前不能添加空格。在赋值和比较周围放置空格(列表中的参数除外)在左括号或参数列表之前没有空格。4.文档字符串和注释Docstrings =如何使用代码注释=为什么以及代码如何工作

文档字符串说明了如何使用代码:

解释功能的目的,即使它对你来说似乎很明显,因为以后不一定对其他人也很明显。描述期望的参数,返回的值和引发的异常。如果该方法与单个调用者紧密耦合,请提及所调用的函数。

这些注释说明了代码维护人员的需求。示例包括给自己的注释,例如:

#!!! BUG:…

#!!! FIX:这是一个黑客

#??? 为什么在这里?

编写好的文档字符串和注释是你的责任,因此请始保持在最新状态!进行更改时,请确保注释和文档字符串与代码一致。

5.变量和赋值

用其他编程语言:

c = a 
a = b
b = c

在Python中,最好在一行代码中使用分配:

b,a = a,b

你可能已经看过它,但是你知道它是如何工作的吗?

逗号是构建元组的语法。在右侧创建一个元组(元组包装)。元组是左侧的目标(元组解包)。

其他例子:

在结构化数据循环中很有用(上面的变量user已保留):

在结构化数据循环中很有用(上面的变量user已保留):

>>> people = [user, ['German', 'GBT', 'unlisted']]
>>> for (name, title, phone) in people:
... print (name, phone)
...
Jan +1-888-222-1546
German unlisted

也可以采取相反的方式,只需确保左右具有相同的结构即可:

>>> jan, (gname, gtitle, gphone) = people
>>> gname
'German'
>>> gtitle
'GBT'
>>> gphone
'unlisted'
>>> jan
['Jan', 'Gomez', '+1-888-222-1546']
6.列表串联与联接

让我们从字符串列表开始:

colors = ['red', 'blue', 'green', 'yellow']

我们希望将这些链条连接在一起以创建一条长链。特别是当子字符串的数量很大时,请避免这样做:

result = ''
for s in colors:
result += s

因为占用大量内存和性能,这些代码运行将会变得非常慢。总和将累加、存储,然后继续进行中间步骤。

相反,请执行以下操作:

join()方法使得在一次通过的整个副本。当你仅处理几个字符串时,它没有什么区别。但是要养成最佳地构建链的习惯,因为使用成百上千的字符串,确实会有所作为。

这里是一些使用 join()方法的技术。如果要使用空格作为分隔符:

result = ' '.join(colors)

或逗号和空格:

result = ', '.join(colors)

为了使语法正确,我们希望除最后一个值之外的每个值之间都使用逗号。拆分列表的语法将完成其余工作。在 [:-1] 的返回所有值,除了最后一个值,我们可以用我们的逗号串联。

colors = ['red', 'blue', 'green', 'yellow']
print ('Choose', ', '.join(colors[:-1]), \
'or', colors[-1])
>> Choose red, blue, green or yellow
7.测试真实条件

就布尔值而言,利用Python既优雅又快捷:

# Do this :     # And not this :
if x: if x == True:
pass pass
# Do this : # And not this :
if items: if len(items) != 0:
pass pass
# and especially not that :
if items != []:
pass
8.尽可能使用枚举

枚举函数接受一个列表并返回对(索引项):

items = ['zero', 'one', 'two', 'three']
>>> print list(enumerate(items))
[(0, 'zero'), (1, 'one'), (2, 'two'), (3, 'three')]

必须使用列表来显示结果,因为枚举是一种惰性函数,仅在需要时才一次生成一个项目,for 循环需要这种机制。一次 print 不会取得任何结果,但必须拥有要显示的整个消息。因此,在使用 print 之前,我们会自动将生成器转换为列表。

因此,使用下面的循环会更好:

for (index, item) in enumerate(items):
print (index, item)
# compared to : # And :
index = 0 for i in range(len(items)):
for item in items: print (i, items[i])
print (index, item)
index += 1

上面的枚举函数返回迭代器的示例中(生成器是一种迭代器),带枚举的版本比其他两个版本更短,更简单。

9.列表理解(List Comprehension)

for if 的传统使用方式:

new_list = []
for item in a_list:
if condition(item):
new_list.append(fn(item))

使用列表理解:

new_list = [fn(item) for item in a_list if condition(item)]

显而易见,列表理解比传统的方式更加清晰直接。你可以有多个 for 循环,并且 else 可以在同一listcomp中,但不能超过两个或三个,或者条件复杂,建议你使用传统的 for 循环

例如,从0到9的正方形列表:

>>> [n ** 2 for n in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

上一个列表中的奇数列表:

>>> [n ** 2 for n in range(10) if n % 2]
[1, 9, 25, 49, 81]

另一个例子:

>>>   [(x, y) for x in (1, 2, 3, 4) if x % 2 == 0 
for y in ['a', 'b'] if y == 'b']
[(2, 'b'), (4, 'b')]
10.生成器表达式

让我们对小于100的数字平方求和:

# With a loop :
total = 0
for num in range(1, 101):
total += num * num

我们还可以使用sum函数,通过建立正确的序列来为我们更快地完成工作。

# With a list comprehension :
total = sum([num * num for num in range(1, 101)])
# With a generator expression :
total = sum(num * num for num in xrange(1, 101))

生成器表达式类似于列表推导,除了它们的计算是懒惰的。列表理解一次计算整个结果,然后将其存储在列表中。必要时,生成器表达式一次计算一个值。当序列很长并且生成的列表只是中间步骤而不是最终结果时,这特别有用。

例如,如果我们必须对数十亿个整数的平方求和,我们将通过列表理解达到内存的饱和,但是生成器表达式不会有任何问题。但是需要一定的运算时间!

total = sum(num * num for num in range(1, 1000000000))

语法上的差异是列表理解中带有方括号,而生成器表达式则没有。生成器表达式有时需要括号,因此你需要一直使用它们。

简而言之 :

当预期结果是列表时,请使用列表理解。当列表只是中间结果时,请使用生成器表达式十大Python编程技巧,助你快速成为Python“大神”


结论

在本文中,介绍了一些学习Python编程的最佳技巧。如果你真的想成为一名程序员或在你的技能中增加编程技能,那么学习Python是一个不错的起点。寻找高质量的在线Python培训课程,并开始了解如何使用Python编程。我建议你在继续学习更困难的概念之前,通过交互式课程学习基础知识。

你也不要过多地加快学习过程,否则可能会错过重要信息。做笔记,并确保定期检查它们,并尝试练习练习尽可能多地编写代码。

与正在像你一样学习的同事保持联系,并且在遇到问题时不要害怕问问题。在遇到问题时帮助他人可能是一个很好的回顾,而与他人的代码一起工作是学习新事物的好方法。

如果你完成所有这些操作,没有什么可以阻止你!你还在等什么?立即开始使用Python进行编程吧!


原文链接:https://towardsdatascience.com/i-thought-i-was-mastering-python-until-i-discovered-these-tricks-e40d9c71f4e2

《 Python代码样式指南》:https://www.python.org/dev/peps/pep-0008/


本文由未艾信息(www.weainfo.net)编译,

查看更多最新资讯,欢迎大家点击阅读原文登录我们的AI社区。

以及关注我们的公众号:为AI呐喊(weainahan)