2013-01-10 32 views
9

Tại sao công việc này -Tại sao [] .append() không hoạt động trong python?

a = [] 
a.append(4) 
print a 

Nhưng điều này không -

print [].append(4) 

Sản lượng trong trường hợp thứ hai là None. Bạn có thể giải thích đầu ra không?

+2

nếu bạn làm in a.append (4), bạn cũng có được Không –

+2

Whew! Cộng đồng Python nhanh và cực kỳ hữu ích. :-) Cảm ơn các bạn. –

Trả lời

12

Phương thức append không có giá trị trả về. Nó thay đổi danh sách tại chỗ, và kể từ khi bạn không chỉ định các [] cho bất kỳ biến, nó chỉ đơn giản là "bị mất trong không gian"

class FluentList(list): 
    def append(self, value): 
     super(FluentList,self).append(value) 
     return self 

    def extend(self, iterable): 
     super(FluentList,self).extend(iterable) 
     return self 

    def remove(self, value): 
     super(FluentList,self).remove(value) 
     return self 

    def insert(self, index, value): 
     super(FluentList,self).insert(index, value) 
     return self 

    def reverse(self): 
     super(FluentList,self).reverse() 
     return self 

    def sort(self, cmp=None, key=None, reverse=False): 
     super(FluentList,self).sort(cmp, key, reverse) 
     return self 

li = FluentList() 
li.extend([1,4,6]).remove(4).append(7).insert(1,10).reverse().sort(key=lambda x:x%2) 
print li 

tôi không quá tải tất cả các phương pháp trong câu hỏi, nhưng khái niệm này nên được rõ ràng.

+0

Nhưng đó không phải là phong cách chức năng. Không nên nó trả lại đối tượng mà nó hoạt động? –

+0

Bị đánh sau năm giây ... * thở dài * – Makoto

+1

Không, 'a' có thể thay đổi được và giá trị của nó bị thay đổi, không có gì được trả lại ở đó. – adarsh

1

Phương pháp append trả về không có giá trị, hay nói cách khác sẽ chỉ được None

a là có thể thay đổi và giá trị của nó được thay đổi, không có gì để được trả lại có.

1

trả lại bổ sung None.

từ ví dụ của bạn:

>>> print a.append(4) 
None 
Các vấn đề liên quan