bool을 int로 사용하는 것이 Pythonic입니까?
False
동일 0
하고 True
동일 1
하므로 다음과 같이 할 수 있습니다.
def bool_to_str(value):
"""value should be a bool"""
return ['No', 'Yes'][value]
bool_to_str(True)
값이 얼마나주의 bool
그러나로 사용됩니다 int
.
이런 종류의 Pythonic 사용입니까 아니면 피해야합니까?
나는 코드를 단순화하기 위해이 사실을 사용하는 것이 완벽하다고 주장 하므로 모든 답변이 False == 0
및 라는 사실의 사용을 비난하기 때문에 이상한 목소리가 될 True == 1
것입니다.
역사적으로 논리적 참 / 거짓 연산은 단순히 0
거짓과 1
참에 사용하는 경향이있었습니다 . Python 2.2의 수명주기 과정에서 Guido는 너무 많은 모듈이 다음과 같은 할당으로 시작되었다는 사실을 발견했습니다. false = 0; true = 1
이로 인해 상용구와 쓸모없는 변형이 생성되었습니다 (후자는 참과 거짓의 대문자가 사방에 있었기 때문에 일부는 모두 사용했습니다). -caps, 일부 모두 소문자, 일부 cap-initial) 및 bool
하위 클래스 int
및 해당 True
및 False
상수를 도입했습니다 .
우리 중 많은 사람들이 파이썬 초보자가 언어 능력 을 제한 하기 위해 새로운 유형과 상수를 사용할 것을 두려워했기 때문에 그 당시에는 꽤 반발이있었습니다 . 그러나 귀도는 우리가 비관적이라고 단호했습니다. 아무도 파이썬을 그렇게 나쁘게 이해하지 않을 것입니다. 예를 들어,로는 완벽하게 자연의 사용을 피하기 위해 False
및 True
목록 인덱스로, 또는 요약에, 또는 다른 완벽하게 명확하고 유용한 숙어.
이 스레드에 대한 답변은 우리가 옳았다는 것을 증명합니다. 우리가 두려워했듯이이 유형과 상수의 역할에 대한 전체적인 오해 가 나타 났고, 사람들 은 피하고 있으며, 더 나쁜 것은 다른 사람들에게 완벽하게 자연스러운 Python 구조를 선호하도록 촉구하고 있습니다. 쓸모없는 회전.
이러한 오해의 조수 퇴치, 나는 모든 사람들이 촉구 파이썬으로 파이썬을 사용 , 하지 기능과 선호하는 스타일 상당히 다른 다른 언어의 금형에 강제하려고합니다. Python 에서 True와 False는 1과 0과 같이 99.9 %로 (그리고 그에 따라 ) 형태가 독점적 으로 다릅니다. 문자열 화를 제외한 다른 모든 작업에 대해 왜곡없이 자유롭게 사용할 수 있습니다. 인덱싱, 산술, 비트 연산 등에 사용됩니다.str(...)
repr(...)
나는 Alex와 함께 있습니다. False==0
및 True==1
, 그게 잘못된 것이 아닙니다.
그래도 Python 2.5 이상에서는 Python의 조건식을 사용하여이 특정 질문에 대한 답을 작성합니다.
def bool_to_str(value):
return 'Yes' if value else 'No'
방법한다는 주장이 실제로 부울 것을 필요는 없다 - 그냥 if x: ...
에 대한 모든 종류의 수용 x
은 bool_to_str()
이 없음, 문자열,리스트, 또는 3.14 전달되지 않을 때 옳은 일을해야 기능을.
확실히:
def bool_to_str(value):
"value should be a bool"
return 'Yes' if value else 'No'
더 읽기 쉽습니다.
경우에 따라 코드가 정확하지 않은 것 같습니다.
>>> def bool_to_str(value):
... """value should be a bool"""
... return ['No', 'Yes'][value]
...
>>> bool_to_str(-2)
'No'
가독성을 위해 조건부 연산자 만 사용하는 것이 좋습니다.
def bool_to_str(value):
"""value should be a bool"""
return "Yes" if value else "No"
실제로 False == 0 및 True == 1 (구현에 의존하지 않음) : Python에서 False == 0 및 True == 1이 구현 세부 사항인지 아니면 언어에 의해 보장 되는지 는 언어의 기능입니다. ?
그러나 나는 대부분의 다른 답변에 동의 ['No', 'Yes'][value]
합니다. … if value else …
또는 사전을 사용하여,를 사용 하여 동일한 결과를 얻는 더 읽기 쉬운 방법 value
이 있으며 부울 인 힌팅 및 진술의 장점이 있습니다.
또한 … if value else …
은 0이 아닌 것이 True라는 일반적인 규칙을 따릅니다 value == -2
. 달리아에서 암시하는 것처럼 (값이 True) 인 경우에도 작동합니다 . 이 경우 목록 및 사전 접근 방식은 강력하지 않으므로 권장하지 않습니다.
bool이 int의 하위 클래스이기 때문에 bool을 int로 사용하는 것은 괜찮습니다.
>>> isinstance(True, int)
True
>>> isinstance(False, int)
True
About your code: Putting it in a one-line function like that is over the top. Readers need to find your function source or docs and read it (the name of the function doesn't tell you much). This interrupts the flow. Just put it inline and don't use a list (built at run time), use a tuple (built at compile time if the values are constants). Example:
print foo, bar, num_things, ("OK", "Too many!)[num_things > max_things]
Personally I think it depends on how do you want to use this fact, here are two examples
Just simply use boolean as conditional statement is fine. People do this all the time.
a = 0 if a: do something
However say you want to count how many items has succeed, the code maybe not very friendly for other people to read.
def succeed(val): if do_something(val): return True else: return False count = 0 values = [some values to process] for val in values: count += succeed(val)
But I do see the production code look like this.
all_successful = all([succeed(val) for val in values])
at_least_one_successful = any([succeed(val) for val in values])
total_number_of_successful = sum([succeed(val) for val in values])
참고URL : https://stackoverflow.com/questions/3174392/is-it-pythonic-to-use-bools-as-ints
'developer tip' 카테고리의 다른 글
NSUserDefaults 사전 iOS에서 모든 키 삭제 (0) | 2020.11.22 |
---|---|
정적 셀이있는 UITableView가 나타나지 않습니다. (0) | 2020.11.22 |
UIImage 둥근 모서리 (0) | 2020.11.22 |
지금까지 발견하고 수정 한 가장 어려운 버그는 무엇입니까? (0) | 2020.11.22 |
C ++ 애드온의 'MediaStream'개체에서 오디오 데이터를 읽는 방법 (0) | 2020.11.22 |