美文网首页
编程踩坑记之函数的参数初始化

编程踩坑记之函数的参数初始化

作者: lxt | 来源:发表于2017-09-04 00:19 被阅读42次

刚发现一个若干月前写的日志草稿,那个“今天”都不知道是什么时候了……
  这个bug挺搞笑的,而且可能也比较容易踩坑。而且ly平时效率超高,什么事都是一下子就做好了,而这个bug我和ly花半天时间debug才发现,发现后两人都哭笑不得,也让我印象深刻。


今天遇到一个很有趣的bug。
  项目里用约4层嵌套的字典、列表等记录configuration,形如:

conf = {
  'aa': {'a': 1, 'b': 2, 'c': [3, 4, 5]},
  'bb': [1, 2, 3],
  'cc': {
    'aaa': [1, 2, 3],
    'bbb': [
        [9, 8, 7],
        1,
      ]
  }
}

然后用一个递归函数去读它:

def confValues(self, vals, conf=None):
  if conf is None:
    conf = self.conf
  if isinstance(conf, collections.MutableMapping):
    return {k: self.confValues(vals, conf=v) for k, v in conf.items()}
  elif isinstance(conf, (list, tuple)):
    return [self.confValues(vals, conf=v) for v in conf]
  elif isinstance(conf, (str, unicode)) and conf.startswith("_"):
    return self.varValue(conf, vals)
  else:
    return conf

稍微说一下,confValues这个函数内部实际上实现什么具体功能并不重要,只要知道关键的一点是它要把conf里的值作为参数conf递归下去就行了。
  这套东西是同事写的,我用他的代码,改conf来适应我的需求。我的conf里的其中一个参数的值是None,于是程序一直出错,参数读不进去。我和同事debug了半天,终于发现原来玄机在confValues函数里conf变量初始化的设定中——递归函数用来标记初始化的无意义的None正好和conf里的有意义的值None冲突了。我把conf用来初始化的默认标记由None改成"initial_conf"(只要是不可能出现在conf里的值就行了),就没问题了。

相关文章

  • 编程踩坑记之函数的参数初始化

    刚发现一个若干月前写的日志草稿,那个“今天”都不知道是什么时候了……这个bug挺搞笑的,而且可能也比较容易踩坑。而...

  • js常见的坑

    title: JS常见的‘坑’ ES6小坑 1.ES6为参数提供了默认值,在定义函数的同时初始化了这个参数,以便在...

  • React-Hook:useState

    1. 使用 因为react是函数式编程,useState函数接收一个初始化参数initialState,其返回值用...

  • python函数参数踩过的坑

    在那些卑微的日子里,不敢去仰望星空的浩瀚,不敢去触碰人间的静好,不敢去凝望高山的雄壮,不敢去期待流水的细长。 最近...

  • Python参数传递小结

    2016.06.14更新:又踩坑了,百度后得到解决,参考链接:python:函数传参是否会改变函数外参数的值 入参...

  • Python练习1.1

    打印九九乘法表实现代码 实现时踩坑: 单个print()函数默认换行,强制不换行需给print()函数增加参数en...

  • 轻松学习 JavaScript——第 3 部分:函数中的默认参数

    JavaScript函数可以有默认参数值。通过默认函数参数,你可以初始化带有默认值的正式参数。如果不初始化具有某些...

  • ether.js 踩坑记录

    ether.js 踩坑记录 背景是这样,需要传入参数调用solidity合约中的函数,合约返回给我一个 BigNu...

  • python函数式编程

    把函数作为参数传入,这样的函数称为高阶函数函数式编程就是指这种高度抽象的编程方式 map map可以接受俩个参数,...

  • supervisor遇到Too many open files

    Supervisor 的一个隐藏坑 <踩坑>supervisor中的minfds及minprocs参数用途

网友评论

      本文标题:编程踩坑记之函数的参数初始化

      本文链接:https://www.haomeiwen.com/subject/ffuzxxtx.html