2012-02-27 3 views
7

함수가 파이썬에서 의미있는 값을 반환해야하는지 확인하는 방법을 생각할 수 있는지 궁금합니다. 다시 말하면,에 대해 반환 값이 사용되는지 여부를 확인하려면 을 확인하십시오. 대답은 '아니오'라고 생각하고 프로그램 흐름을 재구성하는 것이 좋습니다. 해당 함수는 반환 값을 네트워크 소켓에서 가져옵니다. 반환 값이 사용되지 않으면 결과를 가져 오는 리소스를 낭비하고 싶지 않습니다.함수의 반환 값을 "기다리는"것이 있는지 확인하십시오.

나는 콜백 라인을 발견하기 위해 이미 추적을 사용하려고 시도했지만 작동하지 않았다. 여기에 내가 생각했던 내용의 예는 다음과 같습니다

>>> def func(): 
... print should_return() 
... 
>>> func() 
False 
>>> ret = func() 
True 

함수는 반환 값이 할당되고 있다는 것을 "알고있다". 모든 기능들이 완전한 값을 반환

>>> def func(**kwargs): 
... should_return = kwargs.pop('_wait', False) 
... print should_return 
... 
>>> func() 
False 
>>> ret = func(_wait=True) 
True 
+4

파이썬의 모든 함수는 항상 반환됩니다. 명시 적으로 반환하지 않으면 함수는 '없음'을 반환합니다. – birryree

+2

파이썬 함수는 실제로는 반환하지 않습니다. 그러나 반환 할 경우 항상 값을 반환합니다. 지정하지 않으면 None입니다. – Arafangion

+0

나는 그것을 이해하지만 대부분 'None'을 반환하는 함수는 아무 것도 반환하지 않는 것과 같습니다. 이 경우 'None'이외의 값을 반환해야하는지 확인해야합니다. – Violet

답변

3

바로 두 번째 줄을 요구하고, 모든 반환해야하는지 여부를 묻는 경우는 모든 것을 말한다 : "명시 적 암시보다 낫다". 이 경우 선택적 인수를 제공하면 코드가보다 명확하고 이해하기 쉽고 더 간단하고 빠르고 안전합니다. 이것을 wait과 같은 별도의 인수로 유지하십시오.

어려운 점이 있지만 마술처럼 구현할 수는 있지만 코드가 복잡하여 새로운 버전의 Python을 깨뜨리고 쉽게 알 수 없습니다. 경로를 피하십시오. 광란에 이르는 길은 있습니다.

4

:

여기에 내 현재 해결 방법입니다.

그들은 당신이 실제로 import this의 몸에 대한 The Halting Problem

+0

모든 함수가 값을 반환한다는 것을 알고 있습니다. 함수가 _meaningful_ 값을 반환해야하는지 여부를 결정할 수 있는지 여부를 묻는 것이 좋습니다. – Violet

+0

"의미있는"이란 무엇을 의미합니까? 이것은 여전히 ​​동일한 정지 문제입니다. – Arafangion

0

파이썬의 모든 함수가 항상 반환됩니다. 명시 적으로 반환하지 않으면 함수는 없음을 반환합니다.

===========

데프 FUNC() : 동안 진정한 : 패스

반환하지 않습니다이 기능.

임의의 함수가 반환되는지 판단 할 방법이 없습니다. 가능한 경우 튜링 문제를 해결했습니다.

0

미래를 돌려 주거나 '약속'을 고려해보십시오. 즉, 실행될 때 실제로 결과를 판별하는 데 필요한 작업을 수행하는 다른 함수를 리턴하십시오. 나는 당신의 질문보다는 "당신이 필요로하는 것만 평가하는"게으른 평가를 원한다고 생각하는 것 같습니다. 그것은 "필요할 수도있는 값을 반환 할 때만 평가하십시오"라고 혼란스럽게 묻습니다.

관련 문제