파이썬 def 함수에서 True 값 활용

조회수 2043회
def a():
    return True

a()
if a==True:
    print()

간단하게 적은 것인데 위와 같이 하면 작동이 제대로 안되고

def a():
    return True

if a():
    print()

다음과 같이 하면 정상적으로 작동이 되는데 두번째 코드는 True값이 돌아와서 작동이 되는 것은 알겠는데 첫번째 코드에서 왜 안될까요?
답변해주시면 감사하겠습니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • a()는 함수고 a는 변수이기 때문에. 리턴값을 안받아왔음. ohsangyun 2020.6.23 16:34

2 답변

  • 왜 되야 한다고 생각하는지 궁금하네요.

    아주 간단한 함수를 하나 더 만들어보죠. 짝수인지 알려주는 함수

    def 짝수냐(수): return 수%2 == 0
    
    if 짝수냐(2): print(2, "는 짝수")
    

    이렇게 쓸 수있는 함수에요.

    인자를 받아서, 인자로 넘어온 수가 짝수인지를 판단해요.

    님의 생각대로라면, if 짝수냐 == True 같은 게 되어야 한다는건데, 함수의 의미도 그렇고, 인자가 없이 함수이름만 가져와서 비교한다는 게 말이 안 되요.

    함수는 어떤 인자까지 주어져야만, 그 인자가 함수 안에서 계산된 결과를 알 수 있기 때문이죠. 인자가 없는 함수는 함수중에 좀 특이한 경우이고요.

  • def a():
        return True
    
    a()
    if a==True:
        print()
    

    에서 a()을 통해 함수를 호출한 값을 if a==True의 변수 a에 할당하지 않은게 문제인 것 같습니다.

    위 상태에서 print(a)를 해보시면 함수를 실행하는 것이 아니라 <function a at ???>로 메모리에 저장되어 있는 함수를 반환할 것입니다. 즉, a는 변수(True)가 아닌 함수입니다. 함수를 실행하려면 함수 뒤에 ()를 붙여주셔야 합니다.

    해결법: 3번째 줄의 a()a = a()로 고쳐주세요!

    두 번째 코드가 실행되는 이유

    def a():
        return True
    
    if a():
        print()
    

    if a():에서 a() 통해 함수 a의 정보를 받아온게 아니라 바로 함수를 '실행' 시켰기 때문입니다. 만약 if a:라고 하셨다면 if <function at ???>:로 해석되었을 것입니다. 는 False가 아니기에, 물론 print()가 작동하기는 하겠지만 다른 의도로 작동되겠지요...

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)