我刚读过"isinstance()被认为是有害的",这似乎是合理的.简而言之,它主张避免使用这个功能.
好吧,刚才我正在编写一个程序,它将输入结构化为树,并且需要树的结构信息.没有时间实现GUI,我强加给用户将其写入配置文件(我知道这是一个糟糕的接口,但时间表非常紧张).我的用户非常技术,但不一定知道python.我选择该文件将包含表示输入树的列表(列表列表等)列表,最终元素是树的叶节点.我认为这比在用户上强加字典的合成更好.
我计划递归地解析列表如下(省略树的结构的使用,让我们简化并说必须在每个叶节点上调用treatLeafNode()):
def parseTree(input):
if isinstance (input, list):
for item in input:
parseTree(item)
else:
treatLeafNode(item)
Run Code Online (Sandbox Code Playgroud)
根据这篇文章,我想知道是否有一种简单的方法来解决这个问题,而不使用isinstance()......
有人知道吗?
Ned*_*der 10
你的情况就是我要用的地方之一isinstance.您的数据结构受到很好的约束,您需要区分列表而不是列表.用isinstance问,如果它是一个列表.你没有说,但是我想象字符串可能在树的叶子中,并且它们可以像列表那样迭代,所以用鸭子打字的方式区分它们是很繁琐的.
你可以用
def parseTree(input):
try:
for item in input:
parseTree(item)
except TypeError:
treatLeafNode(item)
Run Code Online (Sandbox Code Playgroud)
请注意,这也会迭代字符串.
| 归档时间: |
|
| 查看次数: |
1867 次 |
| 最近记录: |