[code snippet]优先级的妙用

位置参数默认为None,但该参数默认是一个可迭代对象。如果不传参的话:

In [8]: def func(iter_obj=None):
   ...:     for item in iter_obj:
   ...:         print item
   ...:

In [9]: func()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-9-08a2da4138f6> in <module>()
----> 1 func()

<ipython-input-8-f880f4d9f102> in func(iter_obj)
      1 def func(iter_obj=None):
----> 2     for item in iter_obj:
      3         print item
      4

TypeError: 'NoneType' object is not iterable

通过优先级来对准备迭代的对象进行替换:

In [10]: def func(iter_obj=None):
    ...:     for item in iter_obj or ():
    ...:         print item
    ...:

In [11]: func()

来源:werkzeug.routing.Map__init__方法:

class Map(object):
    def __init__(self, rules=None, default_subdomain='', charset='utf-8',
                 strict_slashes=True, redirect_defaults=True,
                 converters=None, sort_parameters=False, sort_key=None,
                 encoding_errors='replace', host_matching=False):
       ...

        for rulefactory in rules or ():
            self.add(rulefactory)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 参考:Werkzeug库——routing模块flask 源码解析:路由odoo(8.0)源码werkzeug(0...
    顾慎为阅读 1,873评论 0 1
  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 3,009评论 0 9
  • 内置函数Python解释器内置了许多功能和类型,总是可用的。他们是按字母顺序列在这里。 abs(x)返回一个数的绝...
    uangianlap阅读 1,291评论 0 0
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,940评论 1 10
  • 第二十四章-赶尽杀绝 我早知道这么狡猾的藤野军官不会乖乖地交出人来,他一定是在怀疑我,计算着些什么好对付着我。 “...
    冰寒三尺阅读 295评论 0 7