파이썬 def 함수에서 True 값 활용
조회수 2043회
def a():
return True
a()
if a==True:
print()
간단하게 적은 것인데 위와 같이 하면 작동이 제대로 안되고
def a():
return True
if a():
print()
다음과 같이 하면 정상적으로 작동이 되는데 두번째 코드는 True값이 돌아와서 작동이 되는 것은 알겠는데 첫번째 코드에서 왜 안될까요?
답변해주시면 감사하겠습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
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()가 작동하기는 하겠지만 다른 의도로 작동되겠지요...
댓글 입력