你中招了吗?Python程序员最常犯的10个错误

本文列举了Python程序员常犯的10个错误,包括滥用表达式作为函数参数的默认值、错误使用类变量、错误指定异常代码块的参数、误解变量作用域、在遍历列表时修改列表、不理解闭包中的变量绑定、模块间循环依赖、文件命名与标准库冲突、不熟悉Python2和Python3差异以及误用`__del__`方法。通过理解这些错误,可以提高Python编程的效率和准确性。
摘要由CSDN通过智能技术生成

Python简介

 

Python是一种具有动态语义的、面向对象的解释型高级编程语言。因其内置了高级数据结构,并支持动态类型和动态绑定,使用Python进行快速应用程序开发十分便利。同时作为一门脚本语言,它兼容部分现有的组件和服务。Python还支持模块和各种库的扩展,有助于实现模块化编程和提高代码复用率。

 

关于本文

 

刚接触这门语言的新手可能会对Python简洁灵活的语法有些不适应,或是低估了Python强大的性能。鉴于此,本文列出了Python开发人员常犯的10个小错误,资深程序猿也难免会中招哦。

 

 

 如果想了解更多Python的伙伴或者小白中有任何困难不懂的可以加入我的python交流学习QQ群:973998104,多多交流问题,互帮互助,群里有不错的学习教程和开发工具。资源分享

 

常见错误1:滥用表达式作为函数参数的默认值

 

Python允许开发者指定函数参数的默认值,这也是Python的一大特色,但当默认值可变时,可能会给开发者带来一些困扰。例如下面定义的函数:

 

 

>>> def foo(bar=[]):        # bar is optional and defaults to [] if not specified

...    bar.append("baz")    # but this line could be problematic, as we'll see...

...    return bar

 

看出bug了吗?那就是在每次调用函数前没有对可变参数进行赋值,而认为该参数就是默认值。比如上面的代码,有人可能期望在反复调用foo()时返回'baz',以为每次调用foo()时,bar的值都为[],即一个空列表。

 

但是,让我们来看看代码运行结果:

 

 

>>> foo()
["baz"]
>>> foo()
["baz", "baz"]
>>> foo()
["baz", "baz", "baz"]

 

嗯?为什么每次调用foo()后会不断把"baz"添加到已有的列表,而不是新建一个新列表呢?答案就是,函数参数的默认值仅在定义函数时执行一次。因此,仅在第一次定义foo()时,bar初始化为默认值(即空列表),此后,每次调用foo()函数时,参数bar都是第一次初始化时生成的列表。

 

常见的解决方案:

 

 

>>> def foo(bar=None):
...    if bar is None:      # or if not bar:
...        bar = []
...    bar.append("baz")
...    return bar
...
>>> foo()
["baz"]
>>> foo()
["baz"]
>>> foo()
["baz"]

 

常见错误2:错误地使用类变量

 

 

代码示例:

 

 

>>> class A(object):
...     x = 1
...
>>> class B(A):
...     pass
...
>>> class C(A):
...     pass
...
>>> print A.x, B.x, C.x
1 1 1

 

运行结果没问题。

 

 

>>> B.x = 2
>>> print A.x, B.x, C.x
1 2 1

 

结果也正确。

 

 

>>> A.x = 3
>>> print A.x, B.x, C.x
3 2 3

 

什么鬼&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值