1、可变的默认参数----list 

示例:

def add(a, mylist=[]):
# print(id(mylist))
mylist.append(a)
return mylist
print(add(5))
print(add(6))
print(add(6, [""]))
print(add(7))

输出结果:

预期输出 实际输出
[5]
[6]
['6', 9008]
[ 7]
[5]
[5, 6]
['0908', 6]
[5, 6, 7]

 查看其id

def add(a, mylist=[]):
print("mylist_id=",id(mylist))
mylist.append(a)
return mylist
print("mylist=",add(5))
print("mylist=",add(6))
print("mylist=",add(6, [""]))
print("mylist=",add(7))

output

mylist_id= 51050248
mylist= [5]
mylist_id= 51050248
mylist= [5, 6]
mylist_id= 51026632
mylist= ['', 6]
mylist_id= 51050248
mylist= [5, 6, 7]

从输出结果可以看出,在第1,2,4次调用时,mylist的内存地址是不变的,mylist是列表属于可变对象,对其进行操作时,不会重新分配地址,append函数是将元素添加到列表的最后面,所以每次输出时将新的参数添加到列表的最后面

第3次调用时,mylist的内存地址改变,重新创建对象,所以将默认参数先赋值,然后再将6添加到列表中

优化

def add(a, mylist=[]):
if mylist is not None:#将列表清空
mylist=[]
print("mylist_id=",id(mylist))
mylist.append(a)
return mylist
print("mylist=",add(5))
print("mylist=",add(6))
print("mylist=",add(6, [""]))
print("mylist=",add(7))

output

mylist_id= 56728264
mylist= [5]
mylist_id= 56728264
mylist= [6]
mylist_id= 56753928
mylist= [6]
mylist_id= 56753928
mylist= [7]

经典面试题-python函数之默认参数的更多相关文章

  1. Python函数的默认参数的设计【原创】

    在Python教程里,针对默认参数,给了一个“重要警告”的例子: def f(a, L=[]): L.append(a) return L print(f(1)) print(f(2)) print( ...

  2. 在python函数中默认参数的一些坑

    一.默认参数 python为了简化函数的调用,提供了默认参数机制: 这样在调用pow函数时,就可以省略最后一个参数不写: 在定义有默认参数的函数时,需要注意以下: 必选参数必须在前面,默认参数在后: ...

  3. python定义函数时默认参数注意事项

    如果在调用一个函数时,没有传递默认参数,则函数内的默认参数是对函数的默认参数属性__defaults__的引用, 如 def func(arg1=[]): arg1.append(2) 调用func时 ...

  4. Python 函数中,参数是传值,还是传引用?

    在 C/C++ 中,传值和传引用是函数参数传递的两种方式,在Python中参数是如何传递的?回答这个问题前,不如先来看两段代码. 代码段1: def foo(arg): arg = 2 print(a ...

  5. [python]一个关于默认参数的老问题和一个有关优化的新问题

    一个老问题: def func(defau=[]): defau.append(1) return defau print(func())#print[1] print(func())#print[1 ...

  6. Python中的默认参数(转)

    add by zhj: Python设计者为何将默认参数设计成这样呢?参见Python函数参数默认值的陷阱和原理深究 原文:https://github.com/acmerfight/insight_ ...

  7. Python之定义默认参数

    定义函数的时候,还可以有默认参数. 例如Python自带的 int() 函数,其实就有两个参数,我们既可以传一个参数,又可以传两个参数: >>> int('123') 123 > ...

  8. C++中函数的默认参数

    使用方法: (1)在函数声明或定义时,直接对参数赋值,该参数就是默认参数. (2)在函数调用时,省略部分或全部参数,这时就会使用默认参数进行代替. 注意事项: (1)一般在声明函数是设置默认参数. 如 ...

  9. C#函数的默认参数——填坑记

    昨天踩了一个坑.默认参数 + 增量发布的坑. 过程是这样的. 1. 有一个底层的方法,格式形如 void Test<T>(int p1, string p2, Func<T> ...

随机推荐

  1. 什么是Docker,它可干什么?

    定义我们知道,软件依赖的环境大致包括: 1• 配置文件2• 代码3• tomcat4• JDK5• 操作系统 Docker作为一个软件集装箱化平台,可以让开发者构建应用程序时,将它与其依赖环境一起打包 ...

  2. 2019-1-17 前言 C#高级编程(第11版)

    C#已更新为更快的速度.主要版本7.0是2017年3月发布,次要版本7.1和7.2很快发布在2017年8月和2017年12月.通过项目设置,您可以与每个应用程序一起分发,是开源的,不可用仅适用于Win ...

  3. [20190416]exclusive latch测试脚本.txt

    [20190416]exclusive latch测试脚本.txt --//昨天做了shared latch的测试脚本,今天完善exclusive latch测试脚本,上个星期的测试我是手工执行的.- ...

  4. JPA实现复杂条件分页查询

    相信熟悉Hibernate的人对于ORM给编程带来的便利于快捷一定不陌生,相对于MyBatis等需要编写复杂的SQL语句,ORM映射为我们带来的便利显而易见.但是,在获得便利的同时,失去的便是灵活性, ...

  5. linux 搭建squid代理服务器

    linux 搭建squid代理服务器 实验环境: 一台linux搭建Web服务器,充当内网web服务器(同时充当内网客户端) 202.100.10.100 一台linux系统充当网关服务器,两个网卡, ...

  6. 考据:internet 和 Web

    我们有时大谈互联网发展趋势,有时讨论Web开发:有时说因特网如何,有时又说万维网怎样.但身处其间我们,有时雾里看花,对有些东西一知半解,这里对internet和Web进行一个简单梳理(很多东西缺少可信 ...

  7. Golang代码实现HTTPs(HTTPS证书生成和部署)

    在win7下试试: 1.实现一个最简单的HTTPS Web Server // gohttps/2-https/server.go package main import ( "fmt&qu ...

  8. 宝塔服务器面板 部署 thinkphp5 坑

    thinkphp5 在宝塔服务器上部署,出现的问题: 1. File not found. 原因: 宝塔服务器默认不支持 pathinfo 的路径访问:需要在软件 - PHP - 管理里面,安装php ...

  9. 揽货最短路径解决方案算法 - V2(增加了时间维度-客户允许的服务时间段,C#/JAVA同步实现,带python作图)

    继上篇,这里改进增加了客户允许服务的时间范围这个维度,并且把C#版本翻译成java,加强了更加形象的图表展示路径(继续是用python的matplotlib作图). 这里的时间范围维度是指:每个客户都 ...

  10. 分布式存储ceph——(3)ceph常用命令

    1.查看ceph集群配置信息 1 ceph daemon /var/run/ceph/ceph-mon.$(hostname -s).asok config show   2.在部署节点修改了ceph ...