Python 中的方法 append
和 extend
本质上不是函数式的,它们修改被调用者并返回 None
。
是否有替代方法来执行这些方法的操作并获取新列表作为返回值?
考虑这个例子:
def myfun(first, *args):
for elem in [first].extend(args):
print elem
显然,这行不通。
有没有办法“就地”构建一个新列表,而不是被迫编写以下内容?
def myfun(first, *args):
all_args = list(first)
all_args.extend(args)
for elem in all_args:
print elem
谢谢。
最佳答案
>>> def append(lst, elem):
... return lst + [elem]
...
>>> append([1, 2, 3], 4)
[1, 2, 3, 4]
>>> def extend(lst1, lst2):
... return lst1 + lst2
...
>>> extend([1, 2], [3, 4])
[1, 2, 3, 4]
这是你想要的吗?
你也可以定义你自己的类型,它在这些操作上返回列表本身,除了改变:
>>> class MyList(list):
... def append(self, x):
... super(MyList, self).append(x)
... return self
... def extend(self, lst):
... super(MyList, self).extend(lst)
... return self
...
>>> l = MyList([1, 2, 3])
>>> l.append(4)
[1, 2, 3, 4]
>>> l.extend([5, 6, 7])
[1, 2, 3, 4, 5, 6, 7]
>>> l
[1, 2, 3, 4, 5, 6, 7]
关于python - 功能附加/扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5314820/