2013-07-13 2 views
2

저는이 개념을 처음 접했습니다. 내 개념을 명확히하는 데 도움을 줄 수있는 사람이 기본 질문에 도움이되기를 바랍니다.언제 반환하지 않는 함수를 작성 하시겠습니까?

코드 줄이기 위해 놀고 있었지만 두 번째 경우가 작동하지 않았습니다.

remove()가 아무 것도 반환하지 않기 때문에 작동하지 않는다고 생각합니다. 그 맞습니까?

궁금한 점이 있습니다. 언제 반환하지 않는 함수를 작성하고 싶습니까? 그것이 사용 되더라도 뭔가를 반환하는 것이 항상 좋은가요? 아무것도 반환하지 않는 함수를 어떻게 다루는가?

s = 'abc' 

# This remove a from the abc 
x = list(s) 
x.remove('a') 

# if remove() can return the list this would be simpler 
x = list(s).remove('a') 
+1

가능한 복제본 [파이썬 함수에 대해 '없음'을 반환하는 것은 언제나 좋은 생각입니까?] (http://stackoverflow.com/questions/16252331/is-returning-none-for-python-function-ever-a-) 좋은 아이디어) – sashkello

+0

나는 당신이 'pop()'을 원한다고 생각한다. –

+0

'sys.exit()'는 반환하지 않는 함수의 좋은 예이다. – yeyo

답변

2

이것은 스타일의 문제입니다. 필자와 많은 사람들은 일반적으로 함수가 무언가를 반환하도록하는 것이 훨씬 더 유용하다고 동의합니다. 특히 None이 아닌 self을 반환하는 객체의 메서드가 체인을 허용합니다.

불행히도 파이썬 커뮤니티의 대부분의 사람들이하는 일이 아니며, 내장 라이브러리의 제작자가하는 일도 아닙니다. 당신은 이것에 대처하는 법을 배워야 할 것입니다. 스타일이 보급되어 있다면, 스타일을 바꾸는 것에 대처하고 지배적 인 패러다임을 따르는 지 결정하십시오.

+0

** 불행히도 ** ?? 왜 불행히도 ?? – eyquem

+0

@eyquem 첫 단락이 충분하다고 설명합니다. 더 유연한 스타일입니다. – Marcin

+1

pyparsing의 대부분의 클래스 메서드는 self를 반환합니다. 스몰 토크 (Smalltalk)에서이 점을 찾아 냈습니다. 스몰 토크는 전형적인 관용구입니다. – PaulMcG

0

함수의 목적은 입력/출력을 수행하거나 부작용 다른 함수 호출, 전역 변수 변경과 같은 부작용을 발행하는 경우를 의미한다. 그리고 결국 "가치 없음"은 그 자체로 반환 값입니다. C 프로그래밍 언어의 함수에는 return 유형 void가 태그됩니다.

기능 프로그래밍 언어는 부작용을 나쁜 것으로보고 제한합니다.

2

함수는 항상 뭔가를 반환합니다. 함수 호출 중에 수행 된 return이 없으면 None이 반환됩니다.

는 더 returnreturn으로 이어질 조건 중 어느 것도 다음 코드와 같이 진정한 결과를 제공하지 통화 중에 excuted되지 않도록 발생할 수 있습니다

는 :

def f(x): 
    if x==2: 
     return 'hello' 

y = f('brouef') 

print 'y ==',y 

y == None 
를 인쇄

다음 코드와 같이 함수의 코드 블록에 return 문이 없으면이 문제가 발생할 수도 있습니다.

.

즉, 알고리즘이 항상 함수 반환을 사용할 필요는 없습니다. 함수는 None 이외의 것을 반환하지 않고 무언가를 변형 할 수 있습니다. 예를 들어
: 정렬 된 객체가 장소에 변경하는 코더가 잘 알고하기 위해, 예를 들어, sort()을 위해 촬영 한 선택입니다

li = [1000] 

def f(x): 
    for i in xrange(100): 
     if i%3==0 and not i in range(20,85): 
      li.append(i) 

print li 
f(li) 
print li 

결과

[1000] 
[1000, 0, 3, 6, 9, 12, 15, 18, 87, 90, 93, 96, 99] 

. 그건 의사가 말했다.

3

많은 프로그래머는 Command-query separation으로 알려진 것을지지합니다.값 (쿼리)을 반환하는 함수는 일반적으로 부작용이 없으며 부작용이있는 함수는 일반적으로 많은 흥미로운 데이터를 반환하지 않는 명령입니다. 이 구분은 글로벌 상태의 변화를 쉽게 추적 할 수 있도록하기위한 것입니다.

관련 문제