pilot
pilot copied to clipboard
函数赋值给可迭代对象的疑问?
看了anytree中的一段demo代码,如下:
>>> def mysort(items):
... return sorted(items, key=lambda item: item.name)
>>> for row in RenderTree(root, childiter=mysort):
... print("%s%s" % (row.pre, row.node.name))
root
├── sub0
│ ├── sub0A
│ └── sub0B
└── sub1
RenderTree的原型如下:
class anytree.render.RenderTree(node, style=ContStyle(), childiter=<type 'list'>, maxlevel=None)
我的疑问是: 1、childiter是一个可迭代对象,mysort是一个自定义的排序函数,上述代码中将mysort赋值给childiter为什么是可行的? 2、如果理解为是将mysort的返回值赋值给childiter,那么上面‘=’号右侧应该是对函数mysort的调用,但是调用函数需要在函数名后面添加‘()’,并且'()'里是不是应该有实参?
childiter
这个参数本来就是一个函数类型,缺省值为 Python 自带的 list
函数,你哪里来的“它是一个可迭代对象”的印象?
感谢老师的解析! 我看文档中对三个参数的描述如下: Keyword Arguments:
style (AbstractStyle) – Render Style. childiter – Child iterator. maxlevel – Limit rendering to this depth.
childter被描述为child iterator,我误以为他是一个可迭代对象