파이썬 연산자에 "=="및 ">"줄을 사용하면 bool 대신 int가 반환됩니다. 나는 int 함수 (int(1 == 1)
)를 사용하거나 0 ((1 == 1) + 0
)을 추가 할 수 있다는 것을 알고 있지만, 쉬운 방법이 있는지 궁금해하고있었습니다. 부서가 수레를 반환 할 때처럼 from __future__ import division
을 입력 할 수 있습니다. int를 반환하는 연산자에서이 작업을 수행 할 수있는 방법이 있습니까? 또는 내가 원하는 것을 할 수있는 __future__._Feature
클래스를 만들 수 있습니까?int를 반환하는 파이썬 연산자
답변
, 당신은 같은 것을에 비교 연산자를 변경 될 수 있습니다.
동일한 표현에서 stack.pop()
을 두 번 호출하는 것에주의하십시오. 인수가 평가 될 순서를 알지 못하고 (다른 경우), Python의 다른 구현은 인수를 다른 순서로 매우 잘 나타낼 수 있습니다. 임시 변수를 사용해야합니다 :
x = stack.pop()
y = stack.pop()
stack.push(1 if x > y else 0)
나는 다른'stack.pop()'을 코드에서했지만 주석에 압축하려고했습니다. 어쨌든 고마워. – None
표현식의 평가 순서는 언어 참조 (http://docs.python.org/reference/expressions.html#evaluation-order)에서 지정합니다. 즉, 부작용이있는 함수 호출을 사용하는 것은 일반적으로 좋지 않은 생각입니다. –
내장 비교 기능을 무시할 수 없습니다. 어떤 의미에서는 비교 연산자가 이미 int
을 반환하고 있습니다. bool
은 int
의 하위 클래스이므로 int에 할 수있는 모든 작업을 수행 할 수 있습니다. 그런 다음 질문이 왜 bool 객체가 아닌 int 객체를 반환하도록하고 싶습니까? 간단하게 (__eq__
, __ne__
는, __gt__
는, __lt__
는 __ge__
, __le__
가) 당신이 원하는 반환 관련 메소드를 구현 - 당신은 사용자 정의 클래스의 비교 연산자를 가질 수
당신이 원하는대로 돌아갑니다. 제어 할 수없는 개체의 경우 변경할 수 없지만 다음을 수행 할 필요가 없습니다. bool 은 the Liskov substitution principle이므로 ints입니다. 기본 유형 '__eq__
메쏘드와 다른 정수들에 의해 반환 된 bool 사이의 차이점을 알리는 코드는 그 결과를 잘못 사용하고 있습니다.
__future__
모듈은 여기에 해당되지 않습니다. 원하는대로 할 수는 없으므로 파이썬에 추가 된 특정 설정을 변경하는 데만 사용할 수 있습니다. __future__
가져 오기를 사용하면 파이썬에 추가 된 것이므로 실제 사업부로 나눌 수 있습니다. __future__
가져 오기를 추가하는 유일한 방법은 Python 자체를 수정하는 것입니다. 당신이 좋아하는 것처럼 >
1
또는 0
의 부울 결과를 변환합니다
stack.push(1 if stack.pop() > stack.pop() else 0)
이 : 당신의 설명을 바탕으로
는자신의 개체에 대해 각 비교 연산자를 쉽게 재정의 할 수 있습니다. 내장 함수의 경우 재정의 메서드는 "읽기 전용"이므로이를 설정하려는 모든 시도가 바뀌지 않습니다.
>>> class foo:
def __lt__(self, other):
return cmp(5, other)
>>> f = foo()
>>> f<3
1
>>> f<7
-1
>>> f<5
0
>>> j=""
>>> j.__lt__=lambda other: cmp(5, other)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
AttributeError: 'str' object attribute '__lt__' is read-only
bool을 int로 변환 하시겠습니까?
1
>>> int(False)
0
아니면 STR에 그 캐스팅
>>> int(True)
'0'
없음
>>> str(int(False))
'1'
>>> str(int(True))
죄송합니다. 메일 링리스트 게시물을 찾을 수 없습니다. 나는 그것이 꽤 흥미 있었던 것에 따라 그것을 기억하고있다.
- 1. SIP에서 int를 반환하는 C++ 메서드를 처리하는 방법 *
- 2. 연산자 = 부스트의 :: 파이썬
- 3. int를 바이너리로 변경하는 방법. 파이썬 2.5
- 4. 스푸핑 파이썬 연산자 우선 순위
- 5. 피연산자 중 하나를 반환하는 부울 연산자
- 6. int를 어떻게 변환합니까? int로
- 7. 파이썬 버전의 C#의 조건부 연산자 (?)
- 8. 파이썬 : 다른 날짜에 동일한 값을 반환하는 time.mktime
- 9. 연산자 + 메모리 누수를 일으키는 개체를 반환하는 오버로드, C++
- 10. 자바 == 연산자
- 11. jquery의 연산자 : not 연산자
- 12. 연산자 ==
- 13. 오버로딩 + 연산자
- 14. 오버로드 연산자 ==
- 15. 문자열상의 파이썬에서 % 연산자
- 16. 객체 배열에 int를 넣은 후 Integer 또는 int를 가져 옵니까?
- 17. int를 통화로 변환하는 방법?
- 18. int에서 부호없는 int를
- 19. 처리 : int를 바이트로 변환
- 20. nullable int를 serialize
- 21. 은의 getline에서 INT를 사용하려고
- 22. fgets 어떻게 int를 읽는가
- 23. int를 잡는 방법
- 24. int를 QString으로 변환하는 방법?
- 25. 콘솔에서 int를 읽는 중
- 26. uint vs int를 사용하여
- 27. int를 문자열로 변환하는 방법?
- 28. int를 NSObject로 변환합니다.
- 29. int를 잘린 소수로 변환
- 30. int를 datetime으로 변환
이것은 명백한 동기없이 꽤 이상한 요청처럼 보입니다. 왜 이것이 필요하다고 생각하는지 더 설명해 주시겠습니까? –
스택 기반 프로그래밍 언어를 만들고 있습니다. 보다 크거나 작은 것을 사용하면 스택에서 두 항목을 팝하고'stack.push (stack.pop()> stack.pop())'와 같은 일을합니다. 정수를 출력하고 싶다면 스택의 최상단을 가져 와서'str (stack.pop()) '를 사용하여 문자열로 변환하고 그것을 출력합니다. 나는 1이나 0이 인쇄되기를 원하지만 "True"또는 "False"를 출력합니다. 이렇게하면 if 문과 같은 것을 만들 때 문제가 발생합니다. – None
파이썬에서 기본 연산자를 수정하는 것은 답이 아닙니다. 파이썬의> (자신의 함수를 작성)을 원하지 않거나, 부울을 문자열로 변환하기 위해 다른 동작을 원한다 (사용자 고유의 함수를 작성한다). –