2011-04-10 2 views
2

어떻게해야합니까? Can 나는 이것을 할 수 있습니까?파이썬 반환 값은 무엇입니까?

def aFunction(argument): 
    def testSomething(): 
     if thisValue == 'whatItShouldBe': 
      return True 
     else: 
      return False 

    if argument == 'theRightValue': # this is actually a switch using elif's in my code 
     testSomething() 
    else: 
     return False 

def aModuleEntryPoint(): 
    if aFunction(theRightValue) == True: 
     doMoreStuff() 
    else: 
     complain() 

aModuleEntryPoint() 

aModuleEntryPoint()은 먼저 작업을 시작하기 전에 조건이 참인지 확인해야합니다. 캡슐화 때문에 aModuleEntryPoint은 상태를 확인하는 방법을 알지 못하지만 aFunction()에는 testSomething()이라는 하위 기능이 있으며이 상태를 확인하는 방법을 알고 있습니다. aModuleEntryPoint()aFunction(theRightValue)입니다.

theRightValueaFunction()에 인수로 전달되었으므로 aFunction()testSomething()을 호출합니다. testSomething()은 논리 테스트를 수행하고 True 또는 False을 반환합니다.

무엇이 testSomething()인지 알기 위해서는 aModuleEntryPoint()이 필요합니다. aModuleEntryPoint()testSomething()이 어떻게 결론에 도달했는지 알 필요가 없습니다.

다른 기능과 싫어하는 부분을 제거하면서 내 실제 소스를 게시하는 것이 실제로 성취 될 것입니다. 따라서이 같은 일반적인 요점을 설정해야했습니다.

+0

@Eimantas 덕분에 머리가 아프다. –

답변

4

내가 지금 잘못 볼 수있는 유일한 것은 당신이 아마도 하위 기능이 여기에 적합한 캡슐화 도구가 아닙니다

+0

그렇지 않으면 aFunction()은 그 시점에서 None을 반환합니다. –

+0

왜 대답하지 않고 직접 답변에 댓글을 씁니까? –

+0

짧은주의 지속 기간. 편집을 시도한 다음 함수의 이름을 잊어 버렸습니다.^\ –

0

라인 (9)에 testSomething() 전에 return이 필요하다. 내부 기능을 외부 엔터티에 공개하려고합니다. 파이썬 클래스는 하위 함수보다 이것을 표현하기위한 더 나은 메커니즘을 제공합니다. 수업이 있으면 원하는 내부 기능을 매우 잘 제어 할 수 있습니다.

+0

고마워요! 나는 그 같은 시간 제한에 있지 않을 때 길 아래로 약간의 소용돌이를 줄 것이다. – brad

0

코드를 살펴본 첫 번째 생각은 너무 복잡하다는 것입니다. aFunction을 가지고있는 이유는 무엇입니까? 당신은

def aModuleEntryPoint(): 
    argument = ... 
    if argument in (theRightValue, theOtherRightValue, theOtherOtherRightValue)\ 
     and testSomething(): 
     doMoreStuff() 
    else: 
     complain() 

if 절은 처음 argument이 가능한 우측 값 중 하나인지 여부를 확인합니다 쓸 수하고 있는지, 그것은 testSomething()를 호출하고 그 반환 값을 확인하기 위해 진행됩니다. 반환 값이 true 인 경우에만 doMoreStuff()이 호출됩니다. 두 가지 테스트 중 하나라도 실패하면 (그 이유는 and입니다) complain()입니다.

+0

데이터 캡슐화로 인해 게시물에서 언급 한 것처럼 aFunction()은 다른 사람들이 수행하지 않는 작업을 수행하는 방법을 알고 있습니다. 실생활에서는 aFunction()을 control()이라고 부릅니다. 목적은 sql에 대한 연결을 제어하는 ​​것입니다. testSomething()은 checkConnection()이라고 불리며, 프로그램 사용자가 데이터 입력의 번거 로움을 겪기 전에 데이터베이스에 대한 좋은 링크를 확인합니다. 단 링크 실패를 알리는 것입니다. – brad

+0

@brad : 좋아, 그럼, 'aFunction'은 자신의 기능을 정당화하기위한 충분한 코드를 포함하고 있다는 것이 당신의 질문에서 분명히 분명하지 않았다. –

관련 문제