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

 更新时间:2019年09月17日 10:06:02   作者:Boyce_L  
这篇文章主要介绍了python 函数的缺省参数使用注意事项,结合实例形式分析了Python函数缺省参数的使用方法与操作注意事项,需要的朋友可以参考下

本文实例讲述了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的字典和列表的使用中一些需要注意的地方

    这篇文章主要介绍了Python的字典和列表的使用中一些需要注意的地方,字典和列表的使用是Python学习当中的基本功,需要的朋友可以参考下
    2015-04-04
  • python kornia计算机视觉库实现图像变化

    python kornia计算机视觉库实现图像变化

    这篇文章主要为大家介绍了python kornia计算机视觉库实现图像变化算法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Python函数式编程实现登录注册功能

    Python函数式编程实现登录注册功能

    这篇文章主要为大家详细介绍了Python函数式编程实现登录注册功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Python使用百度api做人脸对比的方法

    Python使用百度api做人脸对比的方法

    今天小编就为大家分享一篇Python使用百度api做人脸对比的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • python中使用urllib2伪造HTTP报头的2个方法

    python中使用urllib2伪造HTTP报头的2个方法

    这篇文章主要介绍了python中使用urllib2伪造HTTP报头的2个方法,即伪造http头信息,需要的朋友可以参考下
    2014-07-07
  • 利用Python创建位置生成器的示例详解

    利用Python创建位置生成器的示例详解

    在这篇文章中,我们将探索如何利用Python在美国各地城市的地图数据和公共电动自行车订阅源上训练一个快速生成的对抗网络(GAN)模型,需要的可以参考一下
    2022-06-06
  • Python多进程multiprocessing用法实例分析

    Python多进程multiprocessing用法实例分析

    这篇文章主要介绍了Python多进程multiprocessing用法,结合实例形式分析了Python多线程的概念以及进程的创建、守护进程、终止、退出进程、进程间消息传递等相关操作技巧,需要的朋友可以参考下
    2017-08-08
  • 使用python AI快速比对两张人脸图像及遇到的坑

    使用python AI快速比对两张人脸图像及遇到的坑

    这篇文章主要介绍了如何使用python AI快速比对两张人脸图像?实现过程比较简单,但是第三方python依赖的安装过程较为曲折,下面是通过实践对比总结出来的能够支持的几个版本,避免大家踩坑,需要的朋友可以参考下
    2023-02-02
  • 详解用Python练习画个美队盾牌

    详解用Python练习画个美队盾牌

    这篇文章主要介绍了用Python练习画个美队盾牌,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 强悍的Python读取大文件的解决方案

    强悍的Python读取大文件的解决方案

    今天小编就为大家分享一篇关于强悍的Python读取大文件的解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02

最新评论