介绍
Python是一门相对容易掌握的语言,但是由于假设了很多事情,因此犯错误非常容易。 此外,这些错误可能会在很长一段时间内被忽略。 在我其他前四个菜鸟Python错误之前。
避免这些新手Python错误
他们可能会工作,但可能会更好。
今天,我将分享更多在Python 3.8中容易犯的错误。
№1:+ =
在许多情况下,我当然会犯的一个错误是获取+ =操作数。 假设必须用两个独立的操作数来完成加法似乎太容易了,一个用于加法,另一个用于断言。 幸运的是,Python(以及许多其他编程语言)支持可以同时执行数学运算和断言运算的操作数。
代替:
x = x + 5
做:
x += 5
№2:位置自变量符号
在大多数现代脚本语言中,可以将两种主要类型的参数用作函数的参数:
位置和关键词。
在python 3.8发行之前,还没有办法表示位置参数,这使得位置参数默认值基本上是不可能的。 但是,由于更改是在Python 3.8中对此进行了更新,因此我们可以使用。 您应该使用它们,因为位置参数是具有出色性能的优质Python代码的基础。 如果您的代码需要用Python补偿的一件事,尤其是在机器学习时,那可能就是性能。
关键字参数在函数定义时评估一次。 这可能特别不利于递归算法的性能。 而且,如果您要编写成本函数,则绝对必须使用位置参数。 这并不是说根本不应该使用它们,但是,只要有可能,最好使用位置参数。
代替:
def numbers(custom, five=5,ten=10,fifteen=15):
total = five + ten + fifteen + custom
return(total)
- 1.
- 2.
- 3.
- 4.
- 5.
做:
def numbers(custom,\,five=5,ten=10,fifteen=15):
total = five + ten + fifteen + custom
return(total)
- 1.
- 2.
- 3.
- 4.
- 5.
同样重要的是要记住,此功能是相当新的,因此仅使用位置参数以提高性能的概念将仅限于Python 3.8+
№3:初始化返回
尽管这当然并不常见,并且可能是一个相当大的菜鸟动作,但我已经看到人们尝试在其初始化函数中执行返回。 在Python的面向对象的世界中,每次实例化类时都会调用__init__函数。 初始化函数对于设置变量,移动数据和构造类型而言非常有用。 功能强大,责任重大,Python的__init__函数应用于类初始化,而不是监视,不循环,不直接执行,仅用于类初始化。 并请(我有经验的人正在这样做!)
不要返回init!
(这没有任何意义!)
№4:循环依赖
当编写一个大型Python程序包时,每个程序段都可以实现相似的目标,通常,您的程序包将彼此依赖。 这可能会带来很大的问题,并可能导致一些被称为"循环依赖项"的事情。 发生这种情况时,当模块周围的不同位置尝试相互访问时,您可能会遇到问题。
№5:空格还是缩进?
如您所知,Python使用缩进而不是定界符将代码包含在其他代码中。 对于许多人来说,这使代码更易于阅读和编写,尽管主观上我个人鄙视它。 但是,在其他语言中,我通常倾向于使用缩进(Tab键)来缩进代码。但是,根据PEP8,应该为缩进使用四个空格。 老实说,这是我只有在与很多人一起进行项目时才遵循的原则。 对我而言,只要保持一致,我就不会将空格或缩进视为重要的事情,但从正式意义上讲,您应该使用空格。 话虽如此,在编写用于某项工作的实际代码或需要许多其他用户遵守的大型项目时,遵循PEP8的标准可能是一个好主意。
№6:块迭代
当执行迭代的for循环时,编写全长的for循环可以很容易地在代码中表达您的想法。 但是,通常,如果您需要执行的操作仅占用一行,则最好循环一行。 这不仅会使您的代码更漂亮,更简洁,而且还可以提高性能。
代替:
for i in x:
i += 5
- 1.
- 2.
- 3.
做:
[i + 5 for i in x]
- 1.
№7:实习弦
对于最后一个要考虑的错误,我想谈谈实习琴弦。 在某些情况下,Python会尝试重用不可变的对象,而字符串实习就是这种实际作用的一种情况。 所有长度为1的字符串都被屏蔽。 字符串中除ASCII字符,数字和下划线外没有其他任何内容。
在这里,我尝试创建两个不同的对象a和b,但这不是Python所做的。 Python实际上是b指向a的指针,而不是产生新的字符串。 但是,如果我们添加ASCII字符:
因此,在使用不可变字符串时请牢记这一点,因为它无疑给我带来了很多麻烦。