문제

C#에서는 다음을 쉽게 쓸 수 있습니다.

string stringValue = string.IsNullOrEmpty( otherString ) ? defaultString : otherString;

파이썬에서 똑같은 일을하는 빠른 방법이 있습니까?

도움이 되었습니까?

해결책

Python 2.5에는 있습니다

A if C else B

C.에서는 매우 동작합니다. 그러나 그것은 두 가지 이유가 가독성과 일반적으로 문제에 접근 할 수있는 더 간단한 방법이 있다는 사실에 대해 눈살을 찌푸립니다. 예를 들어, 귀하의 경우 :

stringValue = otherString or defaultString

다른 팁

@단

if otherString:
   stringValue = otherString
else:
   stringValue = defaultString

이 유형의 코드는 더 길고 표현력이 있지만 더 읽기 쉽습니다.

그래, 더 길다. "더 표현력이 뛰어나고"더 읽기 쉬운 "것에 대해서는 확실하지 않습니다. 최소한 귀하의 주장은 논쟁의 여지가 있습니다. 나는 두 가지 이유로 그것이 잘못 잘못되었다고 말하는 한 멀리 갈 것입니다.

첫째, 코드는 의사 결정을 강조합니다 (오히려 극도로). 반면에 조건부 운영자는 다른 것, 즉 값 (상기 값의 할당)을 강조합니다. 그리고 이건 바로 그거죠 이 코드의 작가가 원하는 것. 의사 결정은 실제로 코드의 부산물입니다. 여기서 중요한 부분은 과제 작업입니다. 코드는이 과제를 많은 구문 소음으로 숨 깁니다 : 분기.

코드는 중요한 부분에서 강조를 바꾸기 때문에 표현력이 떨어집니다.

그럼에도 불구하고 당신의 코드는 아마도 모호한 ascii 예술과 같은 것을 능가 할 것입니다. ?:. 인라인-if 바람직합니다. 개인적으로, 나는 Python 2.5로 소개 된 변형이 거꾸로 있기 때문에 마음에 들지 않습니다. 나는 C TENRARY 연산자와 같은 흐름 (방향)에서 읽는 것을 선호하지만 ASCII 문자 대신 단어를 사용합니다.

C = if cond then A else B

이것은 손을 내립니다.

C와 C# 불행히도 그러한 표현 진술이 없습니다. 그러나 (그리고 이것은 두 번째 논쟁입니다), C 언어의 3 가지 조건부 운영자는 너무 오랫동안 확립되어 그 자체로 관용구가되었습니다. 3 원 운영자는“기존”만큼이나 언어의 일부입니다. if 성명. 그것은 관용구이기 때문에 언어를 아는 사람은이 코드를 즉시 읽습니다. 또한이 의미론을 표현하는 매우 짧고 간결한 방법입니다. 사실, 그것은 상상할 수있는 가장 짧은 방법입니다. 불필요한 소음으로 본질을 가리지 않기 때문에 매우 표현력이 있습니다.

마지막으로 Jeff Atwood는 다음과 같은 완벽한 결론을 썼습니다. 최고의 코드는 코드가 전혀 없습니다.

읽기 쉬운 표현 코드를 작성하는 것은 결코 나쁜 일이 아닙니다.

if otherString:
   stringValue = otherString
else:
   stringValue = defaultString

이 유형의 코드는 더 길고 표현력이 뛰어나지 만 읽기 쉽고 도로 아래로 넘어 지거나 잘못 편집 할 가능성이 적습니다. 표현 적으로 쓰는 것을 두려워하지 마십시오. 읽을 수있는 코드는 부산물이 아닌 목표가되어야합니다.

이 질문에는 몇 가지 중복이 있습니다.

본질적으로 일반적인 설정에서 2.5 프리 코드는 다음을 사용해야합니다.

 (condExp and [thenExp] or [elseExp])[0]

(Condexp가 주어지면, 그 당시에는 단락 평가를 유지하면서 부울 거짓으로 평가하는 경우 잘못된 결과를 피하기 때문에 잘못된 결과를 피하기 때문에.

그건 그렇고, J0RD4N, 당신은하지 않습니다 (제발 하지 마십시오!) C#에서 이와 같은 코드를 작성하십시오. 사실과는 별도로 IsDefaultOrNull 실제로 호출됩니다 IsNullOrEmpty, 이것은 순수한 코드 팽창입니다. C#은 다음과 같은 상황에 대해 Coalesce 연산자를 제공합니다.

string stringValue = otherString ?? defaultString;

이것이 만약 만 작동한다는 것은 사실입니다 otherString ~이다 null (비어있는 대신) 그러나 이것이 미리 보장 될 수 있다면 (그리고 종종 가능) 코드를 훨씬 더 읽기 쉽게 만듭니다.

또한 "또는"연산자를 사용하는 것이 꽤 잘된다는 것을 발견했습니다. 예를 들어:

finalString = get_override() or defaultString

만약에 get_override () 반환 ""또는 없음, 항상 사용합니다. 기본 스트링.

diveintopython.net의 4 장 답이 있습니다. 파이썬의 및 트릭이라고합니다.

논리적 표현이 참 또는 거짓 상태뿐만 아니라 가치를 반환한다는 사실을 활용할 수 있습니다. 예를 들어 언제든지 사용할 수 있습니다.

result = question and firstanswer or secondanswer

FirstAnswer가 False 인 경우 Ternary 연산자처럼 작동하지 않는다는 경고를 사용합니다. FirstAnswer가 False가 아닌 한 True FirstAnswer가 반환된다고 가정 할 때 질문이 먼저 평가되기 때문에이 사용법은 3 원 운영자처럼 작동하지 않습니다. 그러나 값을 알고 있다면 일반적으로 문제가 없습니다. 예는 다음과 같습니다.

result = choice == 7 and "Seven" or "Another Choice"

If you used ruby, you could write

stringValue = otherString.blank? ? defaultString : otherString;

the built in blank? method means null or empty.
Come over to the dark side...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top