pilot icon indicating copy to clipboard operation
pilot copied to clipboard

函数赋值给可迭代对象的疑问?

Open yeghub opened this issue 4 years ago • 2 comments

看了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的调用,但是调用函数需要在函数名后面添加‘()’,并且'()'里是不是应该有实参?

yeghub avatar Aug 31 '20 02:08 yeghub

childiter 这个参数本来就是一个函数类型,缺省值为 Python 自带的 list 函数,你哪里来的“它是一个可迭代对象”的印象?

neolee avatar Aug 31 '20 12:08 neolee

感谢老师的解析! 我看文档中对三个参数的描述如下: Keyword Arguments:

style (AbstractStyle) – Render Style. childiter – Child iterator. maxlevel – Limit rendering to this depth.

childter被描述为child iterator,我误以为他是一个可迭代对象

yeghub avatar Sep 02 '20 05:09 yeghub