zoukankan      html  css  js  c++  java
  • python 默认形参的 一个漏洞

    啥也不说了,先上代码

     1 global num
     2 num = 1
     3 
     4 def test_a(a={}):
     5     global num
     6     a[num] = num
     7     num += 1
     8     print a
     9 
    10 def test_b(a={}):
    11     global num
    12     a[num] = num
    13     num += 1
    14     print a
    15 
    16 test_a()
    17 test_a()

    输出结果如下:

    {1: 1}

    {1: 1, 2: 2}

    python目前还是停留在中等水平,对其中的一些实现机制还不了解。

    我常在python函数里使用默认形参。昨天学长指出了我这个漏洞。

    还真是这样,除了dict,list也会有这个问题。

    同一函数名 的默认形参是全局静态的。够可怕吧。

    想想看,最简单的解决办法还是。在调用这些函数的地方。test_a({}) 代替test_a() 取消 默认形参。

    还有就是 禁止函数 内部对 形参的任何修改 ,相当于c里的const,python 好像没有这方面的支持

    不知大家有什么这方面的想法。

  • 相关阅读:
    spring冲刺第九天
    梦断代码读后感1
    spring冲刺第八天
    站立会议第三天
    站立会议第二天
    站立会议第一天
    购书问题
    团队项目NABCD分析
    你的灯亮着吗读书笔记3
    你的灯亮着吗读书笔记2
  • 原文地址:https://www.cnblogs.com/2010Freeze/p/2955397.html
Copyright © 2011-2022 走看看