python之函数参数问题(参数为可变对象)
今天看到一段代码,其中函数入参有一个参数为list,类似如下:
def linux_monitor(pid=0,pidlist = []):
pidlist.append(pid)
通过测试发现是有问题的,在其中加入print和调用即可发现(使用默认参数值调用俩次):
def linux_monitor(pid=0,pidlist = []):
pidlist.append(pid)
print(pid)
print(pidlist) linux_monitor()
linux_monitor()
结果如下:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH0AAABQCAYAAAA0snrNAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJeSURBVHhe7dyxjilhHIbxP5VGq3EFKGjVGglKwlVoXBQXIGqVRidxAW5AQSJE4qzJbHJyPoePnRj7vc+v2Vlks/GEzM6+u5nLF4OUbPwRQoguiOiCiC6I6IKILsiJfjqdbDQaWaFQsOFwaMfjMb4HoXCiTyYTq9VqttlsrNPp2Hg8ju9BKG5Gb7fblsvlrF6vEz1ATvTVamX5fD46voZfr9fRMcLx8EQum334EPwyTtFyuWy73S46PhwOVqlUomOEw4k+GAxsNptFZ+2LxcJ6vV58D0LhRO/3+7ZcLq1YLNp0Oo0+R1j41aogztIEEV0Q0QURXRDRBRFdENEFEV0Q0QX994pcJpOJj8weXbR75rFI391X+jXgd8R7M6q/H4fP5/32zowqHE9FZ0YVBu/ozKjC8fLZOzOq38u7HDOqcHhHZ0YVDu/ozKjCwcUZQWzkBHEKLojogoguiOiCiC6I6IKILojogoguyInOf5cKnxOdWVT4bkZnFhU2JzqzqPA9PJFjFhUepyizqPA50ZlFhc+JziwqfCxnBHGWJojogoguiOiCiC6I6IKILojogoguKJE/YEwKfwj5Hndf6dcn/vvJT2pGxX+pSp/323tSMyrmWB/g65V10793tVqty3a7jY73+/2l2WxGx8/y+Tp3vi0kwPuVntSMijlW+l4+e09qRsUc6/28n/GkZlTMsdLnHT2pGRVzrPR5R783o+p2u/HRY8yx0vfjizPn89kajYbN5/P4ltdxceY9fryRu/6cXa1WrVQqxbfg0zGMFMTPS4KILojogoguiOhyzP4AMb44AOFrRHsAAAAASUVORK5CYII=" alt="" />
第二次调用的时候,pidlist并不是空的
所以对于可变参数,特别需要注意,如列表等都可能产生这样的问题
我们可以对代码做如下处理即可正常使用:
def linux_monitor(pid=0,pidlist = None):
if pidlist == None:
pidlist = []
pidlist.append(pid)
print(pid)
print(pidlist)
大家可以试一下
python之函数参数问题(参数为可变对象)的更多相关文章
- python定义函数时默认参数注意事项
如果在调用一个函数时,没有传递默认参数,则函数内的默认参数是对函数的默认参数属性__defaults__的引用, 如 def func(arg1=[]): arg1.append(2) 调用func时 ...
- Python 中函数的 收集参数 机制
定义函数的时候,在参数前加了一个 * 号,函数可以接收零个或多个值作为参数.返回结果是一个元组. 传递零个参数时函数并不报错,而是返回一个空元组.但以上这种方法也有局限性,它不能收集关键字参数. 对关 ...
- Python的函数名作为参数传入调用以及map、reduce、filter
零.python的lambda函数: #lambda function func = lambda x : x+1 #这里是一个匿名函数,x是参数,x+1是对参数的操作 func(1)= 2 多个参数 ...
- Python虚拟机函数机制之参数类别(三)
参数类别 我们在Python虚拟机函数机制之无参调用(一)和Python虚拟机函数机制之名字空间(二)这两个章节中,分别PyFunctionObject对象和函数执行时的名字空间.本章,我们来剖析一下 ...
- python定义函数时的参数&调用函数时的传参
一.定义函数: 1.位置参数:直接定义参数 2.默认参数(或者关键字参数):参数名 = "默认值" 3.位置参数必须在默认参数之前 二.调用函数: 1.按位置传,直接写参数的值 2 ...
- 【python】-- 函数非固定参数,返回值(return)
函数非固定参数 1.默认参数: 代码如下: def information_register(name,age,country,sex): print("----注册信息------&quo ...
- python笔记四(dict/set/不可变对象)
一.dict 字典是包含key_value存储方式.在放进去的时候,必须根据key值Hash出value的存放位置,这样,取的时候才能根据key直接拿到value. dict的操作: d = {'Mi ...
- python之函数形参、实参、可变长参数整体使用和分类
形参与实参 '''def fn(形参们): pass fn(实参们)'''# 形参:定义函数,在括号内声明的变量名,用来结束外界传来的值# 实参:调用函数,在括号内传入的实际值,值可以为常量.变量.表 ...
- python默认参数不能定义为可变对象类型
python的默认参数只会在函数定义时被确定,而不是每次调用时重新确定,所以,一旦在函数中修改了默认参数,则在随后的调用中都会生效 由于这个特性,在定义函数时,如果默认参数使用可变的对象类型,如空列表 ...
- python中函数的默认参数陷阱问题
其实也不能说是陷阱,只是一个不容易注意到的地方,尤其是有其他java/c++类编程语言经验的人员,这里涉及到python的一个特点,所以笔者说是陷阱只是一个噱头而已. def test(item, b ...
随机推荐
- iOS的SVN
1.cornerstone 2.smart svn mac (比较好用) 3.还xcode自带的.
- django 环境配置.
1. 一个虚拟环境对应一个 dajngo项目 2. mkvirtruenv pycham 创建Pure Python 新项目,不是Django 2018.3 其他版本 3. Add Configur ...
- js正则积累
判断是否为数字 function isNumber(val){ var regPos = /^\d+(\.\d+)?$/; //非负浮点数 var regNeg = /^(-(([0-9]+\.[0- ...
- oracle 执行顺序 select查询优化
今天把这几天做的练习复习了一下,不知道自己写得代码执行的效率如何以及要如何提高,于是乎上网开始研究一些材料,现整理如下: 首先,要了解在Oracle中Sql语句运行的机制.以下是sql语句的执行步骤: ...
- laravel简书(1)
Laravel的社区生态 中文社区(http://laravel-china.org) 5.4中文文档(http://d.laravel-china.org/docs/5.4) Laravel源码地址 ...
- sendBroadcast无法接收消息可能原因
Beginning with Android 8.0 (API level 26), the system imposes additional restrictions on manifest-de ...
- 对hadoop namenode -format执行过程的探究
引言 本文出于一个疑问:hadoop namenode -format到底在我的linux系统里面做了些什么? 步骤 第1个文件bin/hadoop Hadoop脚本位于hadoop根目录下的bi ...
- Delphi 域名解析为IP地址
花生壳:1.LJSZForm-Lable1-Caption改成 “IP地址或域名:”2.LJSZForm-BitBtn1Click-注释掉--else if IsIP(Trim(IPEdit.Text ...
- python_day13_js
JavaScript 基础 目录: javascript简介 javascrip历史 ecmascript标准 javascrip基础 js引入方式 js变量.常量.标识符 js数据类型 运算符 流程 ...
- 2018上IEC计算机高级语言(C)作业 第1次作业
1.经过这几周的学习,总结一下学习的心得与体会.(不少于100字:10分) 学习c语言已经一个学期了,刚开始学习的时候老是感觉力不从心.虽然认真听课了, 但是并不能理解它.这种情况到了后来才有所改变. ...