파이썬에서는 명시 적 리턴이없는 프로 시저를 만들 수 있습니다. 도대체 그파이썬 프로 시저 반환 값
>>> a = test(7)
>>> print `a`
'None'
이유 : 즉 : 또한
def test(val):
if 0 == val:
return 8
, 그것은 변수에 그 함수의 결과를 할당 에 가능? 그 어수선한 디자인 결정 뒤에있는 언어 논리는 무엇입니까? 왜 단순히 컴파일러 오류가 발생하지 않습니까?
편집 : 예, 그렇게 작동한다는 것을 알고 있습니다. 감사. 제 질문은 왜입니까? 그것은 당신의 코드에 미묘한 버그를 소개하는 그런 확실한 화재 방법 같아 보입니다. 그리고 아래에서 언급 한 것처럼, e-satis는 "명백한 것이 더 낫다"는 매우 현명한 파이썬의 격언에 반대하는 것으로 보인다.
그럼,이게 뭐야? 단지 설계 감독 또는 간소화 가정인가 의도적으로 고려 된 결정입니까?
편집 : 모든 사람이 이런 식으로 의도를 표현하는 것이 훨씬 더 동의하지 않았다 : 그렇다면
def test(val):
if 0 == val:
return 8
else:
return None
, 왜 파이썬은 컴파일 시간 예외를 발생에 이전 스타일을 선호?
EDIT : S.Lott은 명시 적으로 포인트를 가져오고 (다른 사람들도 마찬가지입니다.이 동작은 파이썬이 동적 언어이므로 그 점을 확인할 수 없음을 나타냅니다. 컴파일 시간, 시스템의 런타임 동작.
프로 시저 (값을 반환하지 않는 함수)와 함수 (수행하는 함수) 사이에는 구분이 없으므로 컴파일 타임에 적용 할 내용이 없습니다. 즉, 런타임에 동작 할 때 우리는 예외적 인 경우가 발생하거나 프로그래머가 기본 동작을 이해하고 무엇을하고 있는지를 알고 있다고 가정하고 조용히 실패하는 경우도 있습니다.
파이썬 방법은 후자를 수행하는 것이고, C 스타일 방법은 전자를 수행하는 것입니다.
그런 식으로 그렇게하는 것이 타당한 것처럼 보인다.
S.Lott의 명확한 정당화가 허용되는 답변에 주석에 묻혀 있으므로 여기에 요약하는 것이 가장 좋습니다.
S.Lott이 정식 답을 얻는 지 확인하기 위해 대답을 수락하지 않습니다. 그렇지 않으면 SilentGhost에 포인트를 줄 것입니다.
모든 데프의 끝에'return'가 생각보다 의미가 있기를 바랍니다. –
-1 : "디자인 감독"? 누구에 의해? 이 방법을 좋아하는 파이썬 커뮤니티 전체? 그것은 질문보다 더 비난처럼 보입니다. –
없음의 기본 반환 값은 매우 유용합니다. 만약 당신이 원하지 않는 경우에는 함수의 마지막 줄로 예외를 발생 시키십시오. –