python 函数的缺省参数使用注意事项分析


Posted in Python onSeptember 17, 2019

本文实例讲述了python 函数的缺省参数使用注意事项。分享给大家供大家参考,具体如下:

python的函数支持4种形式的参数:分别是必选参数、 缺省参数、 可变长参数、关键字参数;而且参数的书写顺序也是又一定规定的,顺序如下

def fun(param, default_params, arbitrary_params, keyword_param)

下面针对缺省型参数分析一些注意事项

先定义这样子一个函数

def test_fun(a=[]):
   a.append('a')
   print a
if __name__ == '__main__':
  test_fun()
  test_fun()

按我们定义函数的意愿,觉得应该打印的结果是:

['a']
['a']

然而真实的结果是

['a']
['a', 'a']

为什么结果会叠加呢,问题出在缺省值上

但我们给一个函数定义一些缺省的参数时,在调用该函数的时候, 实际上是先定义了一个对象, 但是只有第一次调用的时候,才是定义, 而之后的调用, 都是指向同一个变量

所以在第一次调用test_fun()时, 定义了一个[], 而且这个[]在逻辑上是和这个函数绑定的, 而第二次调用test_fun时, 不再定义, 而是直接引用第一次定义的那个缺省对象,所以第二次打印的结果会叠加第一次的

为了避免这种不合乎我们原来意图的调用和实现,在构造缺省参数时, 我们最好构造一个不可变对象, ([]是可变对象), 以防止该缺省对象给表动而导致第二次调用时,缺省值不是我们的最初的值了

那现在再定义函数

def test_fun_1(a=[]):
   a.append('a')
   print a
def test_fun_2(a=[]):
  a.append('a')
  print a
if __name__ == '__main__':
  test_fun_1()
  test_fun_1()
  test_fun_2()
  test_fun_2()

结果会是:

['a']
['a', 'a']
['a']
['a', 'a']

为什么test_fun_1 和 test_fun_2的对象没有相互叠加呢, 因为缺省对象实际和函数是绑定的, 也就是test_fun_1的缺省值[] 和test_fun_2的缺省值[] 是两个不相干的对象

关于Python相关内容感兴趣的读者可查看本站专题:《Python函数使用技巧总结》、《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python 打印出所有的对象/模块的属性(实例代码)
Sep 11 Python
详解Python多线程Selenium跨浏览器测试
Apr 01 Python
python paramiko模块学习分享
Aug 23 Python
Windows下Anaconda2安装NLTK教程
Sep 19 Python
python3.6根据m3u8下载mp4视频
Jun 17 Python
python科学计算之narray对象用法
Nov 25 Python
Python+OpenCV 实现图片无损旋转90°且无黑边
Dec 12 Python
python基于opencv检测程序运行效率
Dec 28 Python
tensorflow实现训练变量checkpoint的保存与读取
Feb 10 Python
基于Python获取docx/doc文件内容代码解析
Feb 17 Python
Django自定义YamlField实现过程解析
Nov 11 Python
python调用win32接口进行截图的示例
Nov 11 Python
Python 字符串、列表、元组的截取与切片操作示例
Sep 17 #Python
Python 实现大整数乘法算法的示例代码
Sep 17 #Python
Python对接 xray 和微信实现自动告警
Sep 17 #Python
Python计算两个矩形重合面积代码实例
Sep 16 #Python
详解Python3 pickle模块用法
Sep 16 #Python
python scipy卷积运算的实现方法
Sep 16 #Python
python 三元运算符使用解析
Sep 16 #Python
You might like
JS实现php的伪分页
2008/05/25 PHP
PHP中创建和验证哈希的简单方法实探
2015/07/06 PHP
Symfony2安装第三方Bundles实例详解
2016/02/04 PHP
PHP 绘制网站登录首页图片验证码
2016/04/12 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
javascript 点击整页变灰的效果(可做退出效果)。
2008/01/09 Javascript
JavaScript Distilled 基础知识与函数
2010/04/07 Javascript
跟着Jquery API学Jquery之一 选择器
2010/04/07 Javascript
在网页中使用document.write时遭遇的奇怪问题
2010/08/24 Javascript
js获取ajax返回值代码
2014/04/30 Javascript
JavaScript实现的内存数据库LokiJS介绍和入门实例
2014/11/17 Javascript
jQuery无刷新上传之uploadify3.1简单使用
2016/06/18 Javascript
js实现定时进度条完成后切换图片
2017/01/04 Javascript
Ionic + Angular.js实现图片轮播的方法示例
2017/05/21 Javascript
vue-router实现组件间的跳转(参数传递)
2017/11/07 Javascript
谈谈我在vue-cli3中用预渲染遇到的坑
2020/04/22 Javascript
使用Python开发windows GUI程序入门实例
2014/10/23 Python
scrapy爬虫实例分享
2017/12/28 Python
对python数据切割归并算法的实例讲解
2018/12/12 Python
python小程序实现刷票功能详解
2019/07/17 Python
python base64库给用户名或密码加密的流程
2020/01/02 Python
在Pytorch中使用Mask R-CNN进行实例分割操作
2020/06/24 Python
matplotlib图例legend语法及设置的方法
2020/07/28 Python
HTML5 语音搜索(淘宝店语音搜素)
2013/01/03 HTML / CSS
利用HTML5 Canvas制作键盘及鼠标动画的实例分享
2016/03/15 HTML / CSS
详解如何获取localStorage最大存储大小的方法
2020/05/21 HTML / CSS
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物
大专自我鉴定范文
2013/10/23 职场文书
通用自荐信范文
2014/03/14 职场文书
聘任书的写作格式及范文
2014/03/29 职场文书
2014年党员承诺书范文
2014/05/20 职场文书
李白故里导游词
2015/02/12 职场文书
中秋节随笔
2015/08/15 职场文书
导游词之天津盘山
2019/11/01 职场文书
导游词之包公祠
2019/11/25 职场文书
解决golang 关于全局变量的坑
2021/05/06 Golang