今天看到一段代码,其中函数入参有一个参数为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之函数参数问题(参数为可变对象)的更多相关文章

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

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

  2. Python 中函数的 收集参数 机制

    定义函数的时候,在参数前加了一个 * 号,函数可以接收零个或多个值作为参数.返回结果是一个元组. 传递零个参数时函数并不报错,而是返回一个空元组.但以上这种方法也有局限性,它不能收集关键字参数. 对关 ...

  3. Python的函数名作为参数传入调用以及map、reduce、filter

    零.python的lambda函数: #lambda function func = lambda x : x+1 #这里是一个匿名函数,x是参数,x+1是对参数的操作 func(1)= 2 多个参数 ...

  4. Python虚拟机函数机制之参数类别(三)

    参数类别 我们在Python虚拟机函数机制之无参调用(一)和Python虚拟机函数机制之名字空间(二)这两个章节中,分别PyFunctionObject对象和函数执行时的名字空间.本章,我们来剖析一下 ...

  5. python定义函数时的参数&调用函数时的传参

    一.定义函数: 1.位置参数:直接定义参数 2.默认参数(或者关键字参数):参数名 = "默认值" 3.位置参数必须在默认参数之前 二.调用函数: 1.按位置传,直接写参数的值 2 ...

  6. 【python】-- 函数非固定参数,返回值(return)

    函数非固定参数 1.默认参数: 代码如下: def information_register(name,age,country,sex): print("----注册信息------&quo ...

  7. python笔记四(dict/set/不可变对象)

    一.dict 字典是包含key_value存储方式.在放进去的时候,必须根据key值Hash出value的存放位置,这样,取的时候才能根据key直接拿到value. dict的操作: d = {'Mi ...

  8. python之函数形参、实参、可变长参数整体使用和分类

    形参与实参 '''def fn(形参们): pass fn(实参们)'''# 形参:定义函数,在括号内声明的变量名,用来结束外界传来的值# 实参:调用函数,在括号内传入的实际值,值可以为常量.变量.表 ...

  9. python默认参数不能定义为可变对象类型

    python的默认参数只会在函数定义时被确定,而不是每次调用时重新确定,所以,一旦在函数中修改了默认参数,则在随后的调用中都会生效 由于这个特性,在定义函数时,如果默认参数使用可变的对象类型,如空列表 ...

  10. python中函数的默认参数陷阱问题

    其实也不能说是陷阱,只是一个不容易注意到的地方,尤其是有其他java/c++类编程语言经验的人员,这里涉及到python的一个特点,所以笔者说是陷阱只是一个噱头而已. def test(item, b ...

随机推荐

  1. truecrype加密卷的使用

    truecrype7.1 文件加密 隐藏加密 密钥加密码双重保护

  2. netty(一) netty有哪几部分构成

    netty netty是一个支持高并发的非阻塞I/O框架. Channel Channel 是 NIO 基本的结构.它代表了一个用于连接到实体如硬件设备.文件.网络套接字或程序组件,能够执行一个或多个 ...

  3. 用归并排序或树状数组求逆序对数量 poj2299

    题目链接:https://vjudge.net/problem/POJ-2299 推荐讲解树状数组的博客:https://blog.csdn.net/int64ago/article/details/ ...

  4. 从汇编层面解释switch语句判断快速的原因

      源码如下: #include <stdio.h>   void main(){     int flag;     flag=1;     switch (flag){         ...

  5. python数据类型分类

    python数据分为可变类型和不可变类型,其中:可变类型:列表,字典不可变类型:布尔值,数字,字符串,元组 specidal:集合作为set是可变的,而作为frozenset是不可变集合 可变类型和不 ...

  6. EF多字段求和(分组/不分组)

    分组多字段求和 query.GroupBy(q => new { q.Year, q.Month }) .Select(q => new { Year = q.Key.Year, Mont ...

  7. 前后端跨域 _ cross domain

    1. 解决跨域既可以从前端, 也可以从后端. 参考好的网络资源: http://www.cnblogs.com/vajoy/p/4295825.html

  8. js中的instanceof运算符

    概述 instanceof运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上 语法 obj instanceof Object;//true 实例obj ...

  9. 对于PHP面试知识点的小结

    基础篇 了解大部分数组处理函数 字符串处理函数(区别 mb_ 系列函数) & 引用,结合案例分析 == 与 === 区别 isset 与 empty 区别 全部魔术函数理解 static.$t ...

  10. Python之路(第三十篇) 网络编程:socket、tcp/ip协议

    一.客户端/服务器架构 1.硬件C/S架构(打印机) 打印机作为一个服务端,电脑连接打印机进行打印 2.软件C/S架构 互联网中处处是C/S架构 如谷歌网站是服务端,你的浏览器是客户端(B/S架构也是 ...