2016-08-22 3 views
2

다음 코드를 고려하십시오.list.remove()의 이상한 동작

def foo(a): 
    b = [a+9*i+j for i in xrange(0,3) for j in xrange(0,3)] 
    return b.remove(a) 

코드가 작동하지 않습니다. null을 반환합니다. 그러나 다음과 같이하면 작동합니다.

def foo1(a): 
    return [a+9*i+j for i in xrange(0,3) for j in xrange(0,3)] 

b = foo1(a) 
b = b.remove(a) # This works 

왜 두 번째 코드 조각이 실패하면 첫 번째 코드 조각이 실패합니까?

답변

5

.remove(...) 아무 값도 반환하지 않습니다. 그들은 기본 None을 반환 - 공식 documentation

에 따르면 당신은 목록을 수정 insert, remove 또는 sort 같은 방법이 더 리턴 값이 인쇄되지 가질 것을 눈치 챘을 것이다. 이것은 파이썬에서 모든 변경 가능한 데이터 구조에 대한 설계 원칙입니다.