3个常见的Python用法错误及解决方法

这篇文章中,我将介绍3个常见的且你不想犯的Python错误。

错误1:默认的可变对象

Python中可变的对象是什么?可变对象是可以更改的对象,比如列表(list),集合(set)和字典(dict)。

为了方便讨论,我们定一个简单且无用的函数:

def add(x, y=[]):
    y.append(x)
    return y

在这个add函数中,我们设置空列表 y 为默认的可变对象,调用add函数:

def add(x, y=[]):
    y.append(x)
    return y


print(add('halil'))
print(add('yıldırım'))

输出:

['halil']
['halil', 'yıldırım']

由结果推断,默认值被改变了。第一次调用 add('halil')时,默认参数 y = ['halil'],并开始覆盖 add 函数的默认值。

我们调用 __default__查看函数的默认值:

def add(x, y=[]):
    y.append(x)
    return y


add('halil')
print(add.__defaults__)
add('yıldırım')
print(add.__defaults__)

output:

(['halil'],)
(['halil', 'yıldırım'],)

由结果可知,默认列表改变了。

解决方法:默认的可变对象设置为None

如下例子:

def add(x, y=None):
    if y is None:
        y = list()
        y.append(x)
    else:
        y.append(x)
    return y


print(add('halil'))
print(add('yıldırım'))

output:

['halil']
['yıldırım']

由结果可知,默认对象没有改变

错误2:复制

首先定义一个字典:

a = {'a': 5, 'b': 4, 'c': 8}

利用赋值运算符复制字典 a :

a = {'a': 5, 'b': 4, 'c': 8}
b = a

删除字典 b 的第一个key值:

del b['a']

打印字典 a 和 b 的值:

a = {'a': 5, 'b': 4, 'c': 8}
b = a
del b['a']
print(b)
print(a)

output:

{'b': 4, 'c': 8}
{'b': 4, 'c': 8}

由结果可知,删除字典b第一个元素的同时,也删除了字典a的第一个元素。这不是我们想要看到的,我们需要字典a不受影响。

解决方法:copy函数

使用copy函数,则能保证字典a不受影响,如下代码:

import copy
a = {'a': 5, 'b': 4, 'c': 8}
b = copy.copy(a)
del b['a']
print(b)
print(a)

output:

{'b': 4, 'c': 8}
{'a': 5, 'b': 4, 'c': 8}

错误3:文件命名

如果你命名文件的名字与你所调用库的名字相同时,则会报错。如下代码:

import random

print(random.random())

output:

File "C:\Users\HalilibrahimYıldırım\Desktop\medium\Python\random.py", line 3, in <module>
print(random.random())
TypeError: 'module' object is not callable

切记 !永远不要命名文件与调用的库名相同。

这三个常见错误,希望对您由所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值