我正在编写一个使用treelib
库构建和填充树状数据结构的函数。您可以按如下方式创建树:
foo = Tree()
......从那里开始,这是标准的。这就是我所拥有的,简化:
def make_special_tree(tree, arg1, arg2):
tree = Tree()
other_stuff = things(arg1)
modify_tree(tree, other_stuff, arg2)
return tree
这就是事情:让我们说我最终想要一个名为blah
的树对象。如果我执行以下操作,该命令将运行而不会出现错误:
make_special_tree('blah', foo, bar)
...但是当我之后输入blah
时,我会回来NameError: name 'blah' is not defined
。如果我执行以下操作,该命令也会运行而不会出现错误:
blah = make_special_tree('yoink', foo, bar)
...当我之后输入blah
时,我会回到<treelib.tree.Tree object at 0x10e60db10>
,这是我想要看到的。 yoink
同时保持未定义,例如前一版本中的blah
。
因此我的问题 - 我可以说这是基本的,但我无法解决这个问题,部分原因是因为我不确定如何准确地提出这个问题。正如你所看到的,现在我必须创建一个类Tree()的实例,并且我想想我必须为我的函数提供一个参数来执行此操作。我认为blah = make_special_tree(args)
是格式化的正确方法,但是如何将变量blah
作为我想要返回的树结构的名称传递?
答案 0 :(得分:0)
函数中的第一个参数是多余的。试试这个:
def make_special_tree(arg1, arg2):
tree = Tree()
other_stuff = things(arg1)
modify_tree(tree, other_stuff, arg2)
return tree
blah = make_special_tree(foo, bar)
答案 1 :(得分:0)
Python函数通常不会指定变量名称&#34;,它们只返回值,您可以使用这些值执行任何操作。
一个值没有变量名。 * 因为一个值可以存储在五个不同的变量中,或者它可以存储在不是变量的东西中,比如列表的元素。它并不关心。
所以,你几乎肯定想要做的是@spectras在评论中建议的:摆脱第一个参数,然后将值存储在你想要的任何变量中:
def make_special_tree(arg1, arg2):
tree = Tree()
other_stuff = things(arg1)
modify_tree(tree, other_stuff, arg2)
return tree
# Two different trees with different names
blah = make_special_tree(foo, bar)
yoink = make_special_tree(foo, bar)
# One tree with two names
spam = make_special_tree(foo, bar)
eggs = spam
# A tree with no names at all
cheese = []
cheese.append(make_special_tree(foo, bar))
如果你确实想要创建一个具有指定名称的全局变量,你可以这样做, ** 但这是一个非常糟糕的主意,除非你试图做一些与众不同的事情,比如collections.namedtuple
的行为方式就像class
一样。
*值可以具有名称,例如具有name
属性。您甚至可以更改Tree
类的定义,以将name
属性用作其输出表示的一部分。但这仍然与你存储的变量无关。
**最简单的方式是globals()[name] = value
。