programing

없음 또는 (없음, 없음)을 반환해야합니까?

nasanasas 2021. 1. 10. 17:25
반응형

없음 또는 (없음, 없음)을 반환해야합니까?


도시 / 주 튜플을 반환하는 객체 메서드가 ('Boston', 'MA')있습니다. 일부 유효한 상황에서는 반환 할 유효한 도시 / 주가 없습니다. 스타일리스트 적으로 return None이나 (None, None)그 경우에 포함 두 개의 요소 튜플이 더 합리적 입니까?


나는 돌아올 것이다 None. 결과가 없다면 왜 결과처럼 보이는 것을 반환 합니까?

또한 테스트하기가 더 쉽습니다.

result = getCity()
if result:
   # do something

(None, None)두 값 중 하나만 None(예 :) 인 경우 에만 반환 합니다 ('Boston', None). 이 경우 더 일관성이 있습니다.


예외적 인 상황에서 하나의 값만 반환하면 튜플 압축 풀기 관용구가 깨질 위험이 있습니다. 일부 발신자는 다음을 발행 할 수 있습니다.

city, state = getCityStateTuple("something")

이 경우 반환 None하면 호출자 가 오류와 함께 중단됩니다 .

TypeError: 'NoneType' object is not iterable

그래서 나는 개인적 (None, None)으로 당신의 상황으로 돌아올 것 입니다. 그런 다음 마일리지가 다를 수 있으며 발신자가 사용하는 패턴에 따라 다릅니다.


(None, None)FalsePython에서 평가되지 않습니다 . 또한 튜플을 빌드하려면 튜플을 빌드하지 않는 것보다 더 많은 작업이 필요합니다. 그래서 나는 선호한다 None.


다른 사람들이 언급했듯이 항목이 포함 된 튜플은으로 테스트되지 않으므로 .이 아닌 False반환하려는 이유 중 하나 입니다. 그러나 메서드 를 재정 의하여 항목이있는 경우에도 테스트 하는 튜플 하위 클래스작성할 수 있습니다 .None(None, None)False__nonzero__()

class falsetuple(tuple):
    def __nonzero__(self):
        return False

그런 다음 falsetuple((None, None))사용 가능한 값이 없을 때 돌아올 수 있습니다. 실제로 항상 동일한 falsetuple .

나는 당신이 이것을 할 것을 반드시 권장하지는 않습니다. 사실 저는이 규칙을 어기는 것에 대해 심각한 의혹을 가지고 있습니다. 비어 있지 않은 튜플의 진실성이 반드시 그 자체로 튜플을 반환하지 않는 이유는 아니라는 것입니다.


루틴이 일반적으로 튜플을 반환하면 튜플이 계속 반환되어야합니다. 진정한 선택은를 반환 (None, None)하거나 예외를 제기하는 것 중 하나이며 이에 대한 좋은 조언을 제공 할 충분한 정보가 없습니다.

그것이 나이고 예외보다 튜플을 선택했다면 나는 kindall이 제안하는 FalseTuple을 사용하고 (튜플 풀기를 사용하는) 호출 코드도 테스트 할 수 있음을 깨닫습니다.

if city is None:

유효한 결과를 얻었는지 확인하십시오. 이렇게하면 가능한 모든 반환 값에 걸쳐 튜플 추출을 지원하고 객체에 "당신은 참으로 평가합니까?"라는 비단뱀 관용구를 계속 사용할 수 있습니다. (여기에 완전성을 위해 킨달이 다시 있습니다) :

class FalseTuple(tuple):
    def __nonzero__(self):
        return False

State를 City의 자산으로 만드는 것은 어떻습니까? 이렇게하면 함수가 항상 하나의 값인 City 또는 None을 반환합니다.

반환 (None, None)은 다른 답변에 명시된 모든 이유로 나쁘고 튜플 풀기 지원에만 사용됩니다.

None은 유효한 도시를 반환 할 수 없다는 것을 나타내는 가장 좋은 값이지만, 튜플 풀기 때문에 1 개 또는 2 개의 값을 반환하는 함수를 갖는 것은 그다지 좋지 않습니다.


나에게 (None, None)을 반환하는 것은 (None, State) 또는 (City, None)도 유효한 반환 값임을 의미합니다. 이 경우 (None, None)으로 가십시오. 그렇지 않으면 Felix와 Brent가 단순히 None을 반환하는 데 매우 좋은 인수를 제공합니다.


반환 된 객체에 대한 공용 메서드를 구현 isValidLocation()합니다. 위치가 유효하면 true를 반환하고 위치가 없으면 false를 반환 한다고 가정 해 보겠습니다 .


None을 반환하면 반환 값을 확인하는 것이 훨씬 쉽습니다.

참조 URL : https://stackoverflow.com/questions/7082966/should-i-return-none-or-none-none

반응형