Python中的的函数的参数传递

来源:互联网 发布:淘宝美工作品欣赏 编辑:程序博客网 时间:2024/05/16 19:39

2017.10.10更新,如果用字典传参,关键字参数等等,用get获取值比用index更好,Python 字典(Dictionary) get() 函数返回指定键的值,如果值不在字典中返回默认值或者None

def sum1(item,a=[]):    a.append(item)    return a

如果这么定义函数的参数,因为a指向[]这个空列表对象,以后每次调用这个函数都会调用这个指向同一个空列表对象的参数,造成数据异常!!!比如调用同一函数两次得到不同数据

>>> print sum1('one')['one']>>> print sum1('one')['one', 'one']

这里写图片描述
怎么改?
正确的方式是,把参数默认值指定为None

def sum1(item,a=None):    if a=None:        a = []    a.append(item)    return a

这里写图片描述

看不懂?你需要了解下python中函数参数的调用传递的具体含义
看这里:https://foofish.net/python-function-args.html

这里记住的是类型是属于对象的,而不是变量。而对象有两种,“可更改”(mutable)与“不可更改”(immutable)对象。在python中,strings, tuples, 和numbers是不可更改的对象,而list,dict等则是可以修改的对象。(这就是这个问题的重点)

当一个引用传递给函数的时候,函数自动复制一份引用,这个函数里的引用和外边的引用没有半毛关系了.所以第一个例子里函数把引用指向了一个不可变对象,当函数返回的时候,外面的引用没半毛感觉.而第二个例子就不一样了,函数内的引用指向的是可变对象,对它的操作就和定位了指针地址一样,在内存里进行修改.

https://github.com/taizilongxu/interview_python#python%E8%AF%AD%E8%A8%80%E7%89%B9%E6%80%A7

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 赣州住房公积金 太原住房公积金查询个人账户 郑州市住房公积金查询 杭州住房公积金管理中心 乐山市住房公积金管理中心 长春住房公积金查询 青海住房公积金查询网 住房公积金管理 宜春住房公积金查询 惠州市住房公积金管理中心 玉林住房公积金查询个人账户 枣庄住房公积金查询 六安住房公积金管理中心 厦门住房公积金查询 渭南市住房公积金个人查询 乐山住房公积金查询个人账户 深圳住房公积金电话多少 南宁住房公积金查询 住房公积金查询电话12329 济宁住房公积金管理中心 宁德市住房公积金查询窗口 兰州市住房公积金查询系统 孝感住房公积金查询 兰州住房公积金查询 滁州住房公积金 上海住房公积金网 个人住房公积金查询网 省住房公积金管理中心 韶关市住房公积金管理中心 长沙住房公积金管理中心 赣州住房公积金查询 西安住房公积金查询 南充住房公积金查询 北京住房公积金查询 南宁住房公积金查询个人账户 东莞住房公积金 资阳住房公积金查询 西安市住房公积金查询系统 郑州住房公积金查询 连云港市住房公积金查询系统 上海住房公积金查询个人账户