식의 :과 없음의 값을 잡기 "또는"나는 코드 검토이 건너 온
def some_method(self, path):
path = os.path.abspath(os.path.expanduser(path or ""))
내 첫 반응은 "! 아아 나쁜"이었다 하지만 두 번째 생각은 ... 그렇습니까?
식의 :과 없음의 값을 잡기 "또는"나는 코드 검토이 건너 온
def some_method(self, path):
path = os.path.abspath(os.path.expanduser(path or ""))
내 첫 반응은 "! 아아 나쁜"이었다 하지만 두 번째 생각은 ... 그렇습니까?
이것은 표현식의 첫 번째 부분이 False로 평가되는 경우 일종의 기본값 또는 폴백 값을 구현하기위한 일반적인 패턴입니다. 가장 좋은 방법으로 생각해보십시오. None을 빈 문자열로 변환하는데도 사용할 수 있습니다. 이런 식으로 호출하기 때문에
는하지만이 예에서는 조금 무의미 :
instance.some_method()
오류를 얻을 것이다.
이 같이 호출해야합니다 : 틀림없이
def some_method(self, path=None):
path = os.path.abspath(os.path.expanduser(path or ""))
또는 :
이instance.some_method(None)
그것은 더 나은 것
def some_method(self, path=""):
path = os.path.abspath(os.path.expanduser(path))
... 어떤 않을 것 None 값을 경계하십시오. 이 경우 우는 소리가 나거나 "불이행"하는 것이 더 나은지 논쟁 할 수 있습니다.
여하튼 경로 전부 지금 생략 될 수
instance.some_method()
I 참조 X '가 포함되지 않은 경우, X = defaultValue' 자주. 논리 연산자가 피연산자 중 하나를 반환하는 것을 이용하는 것은 조건 연산자 ('? :')를 구현하는 데 더 일반적으로 사용되지만, 그것은 몇몇 버전 이후 논란의 여지는 있습니다. – delnan
모든 언어로 항상 다음을 사용합니다. 그러나 다른 언어도 C의 tenary 연산자와 같은 종류의 단축키를 제공합니다 ... 그리고 더 새로운 Python 버전에서는 "else if b else if b"와 비슷한 구조가 있습니다 (추악하거나 추한 것은 아닙니다 ...) 다른 주제). –
다른 언어 지원은 중요하지 않습니다. 나는 AFAIK가'x is None : x = default'가 Python *에서 훨씬 더 일반적이라고 말하고 있습니다. 그걸 확인해 줄 수 있니? – delnan