初学者必犯的10个Python错误_学python常见的错误

1.# Good (solving problem using vector operations)

3.mean_failed = (random_scores[random_scores < 70]).mean()
5.print(mean_failed)

如果你同时运行两者,你会发现Numpy更快。为什么呢?因为Numpy将我们的操作向量化了。

  1. 不关闭之前打开的文件

大家都知道的好做法是,我们用Python打开的每个文件都必须关闭。

这就是为什么我们每次处理文件时都要使用 open, write/read, close。这很好,但是如果 write/read方法抛出一个异常,文件就不会被关闭。

为了避免这个问题,我们必须使用 with语句。这样,即使有异常,也会关闭该文件。

1.# Bad

3.f = open('dataset.txt', 'w')


5.f.write('new\_data')

7.f.close()

9.# Good

11.with open('dataset.txt', 'w') as f:


13.f.write('new\_data')

5. 不遵循PEP8

PEP8是一份每个学习Python的人都应该阅读的文件。它提供了关于如何编写Python代码的指南和最佳实践(本文中的一些建议来

自PEP8)

对于那些刚接触Python的人来说,这个准则可能会让他们感到担心,不过大可不必担心,一些PEP8规则被纳入IDE中(我就是这

样知道 裸except规则的)。

假设你在使用Pycharm。如果你写的代码没有遵循PEP8的准则,你会看到下面图片中那些难看的下划线。

如果你把鼠标悬停在下划线上,你会看到关于如何修复它们的提示。

在我的例子中,我只需要在 ,和 :后面添加一个空格。

1.# Good

3.my_list = [1, 2, 3, 4, 5]

5.my_dict = {'key1': 'value1', 'key2': 'value2'}

7.my_name = "Frank"

我还把我的变量 x的名字改为 my_name。这不是Pycharm建议的,但PEP8建议使用容易理解的变量名。

6. 在处理字典时没有正确使用.key和.values方法

我想大多数人都知道在使用字典时, .keys和 .values方法的作用。

如果你不知道的话,让我们来看看。

1.dict_countries = {'USA': 329.5, 'UK': 67.2, 'Canada': 


2.>>>dict_countries.keys()  


3.dict_keys(['USA', 'UK', 'Canada'])


4.>>>dict_countries.values()  


5.dict_values([329.5, 67.2, 38])

这里的问题,我们没有理解并正确使用它们。

假设我们想循环浏览 dictionary 并获得 keys。你可能会使用 .keys 方法,但是你知道你可以通过在字典中循环获得键吗?在这种

情况下,使用 .keys 将是不必要的。

1.# Not using .keys() properly

3.# Bad


5.for key in dict_countries.keys():

7.    print(key)

9.# Good

11.for key in dict_countries:

13.    print(key)

另外,我们可能会想出一些变通的办法来获得字典的值,但这可以用 .items()方法轻松获得。

1.# Not using .items()

3.# Bad


5.for key in dict_countries:

7.    print(dict_countries[key])

9.# Good

11.for key, value in dict_countries.items():

13.    print(key)

15.    print(value)

7. 从不使用comprehensions(

当你想在一个已经定义好的序列的基础上创建一个新的序列(列表、字典等)时,comprehension提供了一个更短的语法。

比如说我们想把我们的 countries列表中的所有元素都小写。

虽然你可以用一个 for循环来做这件事,但你可以用一个列表理解来简化事情。

理解是非常有用的,但是不要过度使用它们! 记住 Python 的禅宗。“简单比复杂好”。

1.# Bad


3.countries = ['USA', 'UK', 'Canada']

5.lower_case = []

7.for country in countries:


9.    lower_case.append(country.lower())
11.# Good (but don't overuse it!)

13.lower_case = [country.lower() for country in countries]

8. 使用range(len())

我们作为初学者最先学习的函数之一是 range和 len,所以难怪大多数人在循环浏览列表时都有写 range(len())的坏习惯。

假设我们有一个 countries, populations列表。如果我们想同时遍历两个列表,你可能会使用 range(len())。

1.# Using range(len())

3.countries = ['USA', 'UK', 'Canada']

5.populations = [329.5, 67.2, 38]
7.# Bad

9.for i in range(len(countries)):

11.    country = countries[i]

13.    population = populations[i]

15.    print(f'{country} has a population of {population} million people')

虽然这可以完成工作, 但你可以使用 enumerate来简化事情 (或者更好的是, 使用 zip函数来配对两个列表中的元素)

1.# OK
3.for i, country in enumerate(countries):

5.    population = populations[i]

7.    print(f'{country} has a population of {population} million people')

9.# Much Better

11.for country, population in zip(countries, populations):

13.    print(f'{country} has a population of {population} million people')

  1. 使用+运算符进行格式化

我们在Python中最先学会的东西之一可能是如何用 +运算符连接字符串。

这是在 Python 中连接字符串的一种有用但低效的方法。此外,它也不是那么好看–你需要连接的字符串越多,你使用的+就越多。

你可以使用 f-string来代替这个运算符。

1.# Formatting with + operator
3.# Bad
5.name = input("Introduce Name: ")
7.print("Good Morning, " + name + "!")
9.# Good
11.name = input("Introduce Name: ")
13.print(f'Good Morning, {name}')

string最大的特点是,它不仅对连接有用,而且有不同的应用。

10. 使用默认的可变值

如果你把一个可变的值(如list)作为一个函数的默认参数,你会看到一些意想不到的结果。

1.# Bad


2.def my_function(i, my_list=[]):  


3.    my_list.append(i)  


4.    return my_list


5.>>> my_function(1)  


6.[1]  


7.>>> my_function(2)  


8.[1, 2]  


9.>>> my_function(3)  


10.[1, 2, 3]


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210511152217670.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poaWd1aWd1,size_16,color_FFFFFF,t_70)

**感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:**



① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值