2011-11-06 27 views
3

为什么下面的代码给出'None'?我该如何解决这个问题?Python list.append作为参数

def f1(list1): 
    f2(list1.append(2)) 

def f2(list1): 
    print(list1) 

f1([1]) 

什么也不起作用:

def f1(list1): 
    arg1 = list1.append(2) 
    f2(arg1) 

回答

6

这取决于你想要做什么。如果你想list1f1一个电话后发生了变化,使用

def f1(list1): 
    list1.append(2) 
    f2(list1) 

看看会发生什么:

>>> l = [1] 
>>> f1(l)  # Modifies l in-place! 
[1, 2] 
>>> l 
[1, 2] 

如果你不想list1改变的更多信息:

def f1(list1): 
    f2(list1 + [2]) 

现在看到这个:

>>> l = [1] 
>>> f1(l)  # Leaves l alone! 
[1, 2] 
>>> l 
[1] 
+0

谢谢!这是我正在寻找的。 – Ihmahr

7

在这种变异的物体(如list.appendlist.extend,或list.sort)返回None一般来说,Python方法。

如果你想打印出新的列表:

def f1(list1):  
    list1.append(2) 
    f2(list1) 
+0

谢谢,这解释了很多。 – Ihmahr

+0

或者,编写一个生成修改列表的表达式作为单独的值。例如,'f2(list1 + [2])'。 –