美文网首页
Python 可变变量作为形参或者变量 容易出现的错误

Python 可变变量作为形参或者变量 容易出现的错误

作者: 小螳螂 | 来源:发表于2017-08-28 22:49 被阅读0次

01可变参数作为函数的形参

def fn(var1,var2 = []):  
    var2.append(var1)  
    print(var2)

期待结果

fn(3)
[3]
fn(4)
[4]
fn(5)
[5]

实际结果

fn(3)
[3]
fn(4)
[3, 4]
fn(5)
[3, 4, 5]

原因:函数运行时,形参并不是每次都被实例化,一直使用同意对象。 解决方法:提供一个新的对象,每次都要实例化一次
修改代码:

def fn2(var1,var2 = None):  
    if not var2:  
        var2 = []  
    var2.append(var1)  
    print(var2)

fn2(3)
[3]
fn2(4)
[4]
fn2(5)
[5]

注意:对于不可变数据类型,比如 元祖、字符创、整形,是不需要考虑这种情况的。

02可变数据类型作为类变量

错误代码:

class URLCatcher(object):
    urls = []
    def add_url(self,url):
        self.urls.append(url)

a = URLCatcher()
a.add_url('www.baidu.com')
b = URLCatcher()
b.add_url('www.google.com')
print(b.urls)
print(a.urls)

期望结果

www.google.com
www.baidu.com

实际结果

['www.baidu.com', 'www.google.com']
['www.baidu.com', 'www.google.com']

修改代码

class URLCatcher02(object):
    def __init__(self):
        self.urls = []
    def add_url(self,url):
        self.urls.append(url)

03可变的分配错误

字典和列表属于可变对象,元祖属于不可变对象!

change = {'1':'啊','2':[2,2]}
change02 = change.copy()
change02['4'] = '斯'
print('change的值是:',change,'change02的值是:',change02)

解决方法 使用.copy() 或者 切片复制方法[:]

相关文章

网友评论

      本文标题:Python 可变变量作为形参或者变量 容易出现的错误

      本文链接:https://www.haomeiwen.com/subject/uedndxtx.html