Python:当在参数内创建的列表中扩展时,列表类型变为 None(超出范围?)
Python: List type becomes None (out of scope?) when extended insde a list created inside an argument
我试图扩展列表 class 以便我可以将名称添加到列表中,稍后我想创建所有列表
所以我有以下代码:
但问题是它只适用于一级
class seg(list):
def __init__(self, value):
self.value = value
def show_hierarchy(fl,hierarchy=""):
hierarchy += fl.value + " - "
print(hierarchy.rstrip(" - "))
for lists in fl:
show_hierarchy(lists, hierarchy)
# one level deep
fl = seg("1")
fl.extend([
seg("1.1"),
seg("1.2"),
seg("1.3"),
seg("1.4")])
print(fl)
show_hierarchy(fl)
# two levels deep
fl = seg("1")
fl.extend([
seg("1.1"),
seg("1.2").extend([
seg("1.2.1"),
seg("1.2.2")])])
print(fl)
show_hierarchy(fl)
输出如下:
[[], [], [], []]
1
1 - 1.1
1 - 1.2
1 - 1.3
1 - 1.4
[[], None]
1
1 - 1.1
我真的很想知道发生了什么以及我该如何解决这个问题。
按照惯例,Python 容器 return None
上的增变器方法(并非总是如此,请考虑 list.pop
)。当然,您可以在派生 class 中更改此行为,但我不知道这是否是个好主意:
In [121]: class seg(list):
...: def __init__(self, value):
...: self.value = value
...: def extend(self, value):
...: list.extend(self, value)
...: return self
...:
In [122]: fl = seg("1")
...: fl.extend([
...: seg("1.1"),
...: seg("1.2").extend([
...: seg("1.2.1"),
...: seg("1.2.2")])])
...:
Out[122]: [[], [[], []]]
In [123]: def show_hierarchy(fl,hierarchy=""):
...: hierarchy += fl.value + " - "
...: print(hierarchy.rstrip(" - "))
...: for lists in fl:
...: show_hierarchy(lists, hierarchy)
...:
In [124]: show_hierarchy(fl)
1
1 - 1.1
1 - 1.2
1 - 1.2 - 1.2.1
1 - 1.2 - 1.2.2
最终对我有用的是:
class seg(list):
def __init__(self, value):
self.value = value
def add(self, lists):
for l in lists:
self.append(l)
return self
# two levels deep
fl = seg("1")
fl.add([
seg("1.1"),
seg("1.2").add([
seg("1.2.1"),
seg("1.2.2")])])
我试图扩展列表 class 以便我可以将名称添加到列表中,稍后我想创建所有列表
所以我有以下代码: 但问题是它只适用于一级
class seg(list):
def __init__(self, value):
self.value = value
def show_hierarchy(fl,hierarchy=""):
hierarchy += fl.value + " - "
print(hierarchy.rstrip(" - "))
for lists in fl:
show_hierarchy(lists, hierarchy)
# one level deep
fl = seg("1")
fl.extend([
seg("1.1"),
seg("1.2"),
seg("1.3"),
seg("1.4")])
print(fl)
show_hierarchy(fl)
# two levels deep
fl = seg("1")
fl.extend([
seg("1.1"),
seg("1.2").extend([
seg("1.2.1"),
seg("1.2.2")])])
print(fl)
show_hierarchy(fl)
输出如下:
[[], [], [], []]
1
1 - 1.1
1 - 1.2
1 - 1.3
1 - 1.4
[[], None]
1
1 - 1.1
我真的很想知道发生了什么以及我该如何解决这个问题。
按照惯例,Python 容器 return None
上的增变器方法(并非总是如此,请考虑 list.pop
)。当然,您可以在派生 class 中更改此行为,但我不知道这是否是个好主意:
In [121]: class seg(list):
...: def __init__(self, value):
...: self.value = value
...: def extend(self, value):
...: list.extend(self, value)
...: return self
...:
In [122]: fl = seg("1")
...: fl.extend([
...: seg("1.1"),
...: seg("1.2").extend([
...: seg("1.2.1"),
...: seg("1.2.2")])])
...:
Out[122]: [[], [[], []]]
In [123]: def show_hierarchy(fl,hierarchy=""):
...: hierarchy += fl.value + " - "
...: print(hierarchy.rstrip(" - "))
...: for lists in fl:
...: show_hierarchy(lists, hierarchy)
...:
In [124]: show_hierarchy(fl)
1
1 - 1.1
1 - 1.2
1 - 1.2 - 1.2.1
1 - 1.2 - 1.2.2
最终对我有用的是:
class seg(list):
def __init__(self, value):
self.value = value
def add(self, lists):
for l in lists:
self.append(l)
return self
# two levels deep
fl = seg("1")
fl.add([
seg("1.1"),
seg("1.2").add([
seg("1.2.1"),
seg("1.2.2")])])