연산자와 메서드간에 큰 차이점이 있습니까?연산자와 메서드의 차이점
내가 보는 유일한 차이점은 불리는 방식이며 다른 차이점이 있습니까?
예를 들어, 파이썬 연결에서 슬라이싱, 인덱싱은 연산자로 정의되고 (문자열 참조) upper()
, replace()
, strip()
등의 메소드가 정의됩니다.
연산자와 메서드간에 큰 차이점이 있습니까?연산자와 메서드의 차이점
내가 보는 유일한 차이점은 불리는 방식이며 다른 차이점이 있습니까?
예를 들어, 파이썬 연결에서 슬라이싱, 인덱싱은 연산자로 정의되고 (문자열 참조) upper()
, replace()
, strip()
등의 메소드가 정의됩니다.
내가 currectly 질문을 이해한다면 ... 간단히 말해서
는 모든 객체의 방법이다. operators에있는 파이썬 매직 클래스 메소드에서 "표현 연산자"메소드를 찾을 수 있습니다.
그래서 왜 파이썬은 [x:y]
, [x]
, +
, -
과 같은 "섹시한"것들을 가지고 있습니까? 대부분의 개발자들에게는 일반적인 사람들이기 때문에 개발 사람들에게 익숙하지 않은 사람 이어도 +
, -
과 같은 수학 함수는 인간의 시선을 사로 잡을 것이고 그 결과를 알게 될 것입니다. 색인 생성과 마찬가지로 많은 언어에서 일반적인 구문입니다.
그러나 upper
, replace
, strip
개의 메서드를 표현할 특별한 방법이 없으므로 "식 연산자"가 없습니다.
"표현식 연산자"와 메서드가 다른 점은 어떻게 보이는지 말하고 싶습니다.
귀하의 질문은 다소 광범위합니다. 예를 들어, 연결, 분할 및 색인 생성은 문자열의 경우 으로 정의되고의 경우 특수 구문 (예 : []
)이 사용됩니다. 그러나 다른 유형은 사물을 다르게 할 수 있습니다.
사실, 대부분의 (나는 모든 것)의 동작은 magic methods에 의해 이루어 지므로, 실제로는 x + y
과 같은 것을 쓰면 메소드가 호출됩니다.
실용적인 관점에서, 주요 차이점 중 하나는 사용 가능한 구문 연산자 집합이 고정되어 있으며 새로운 구문 연산자를 Python 코드로 추가 할 수 없다는 점입니다. 자신 만의 코드를 작성하여 $
이라는 새 연산자를 정의한 다음 x $ y
을 사용할 수 없습니다. 반면에 원하는만큼 많은 메소드를 정의 할 수 있습니다. 즉, 운영자에게 할당 한 행동 (있는 경우)을 신중하게 선택해야합니다. 제한된 수의 운영자 만 있으므로 일반적이지 않은 작업에서 "낭비하지"않도록하십시오.
연산자와 메서드간에 상당한 차이가 있습니까?
실제적으로 말하면, 각각의 운영자가 특정 Python special method 매핑되므로 차이없다. 게다가, 파이썬이 연산자의 사용을 만날 때마다 암묵적으로 관련 특수 메소드를 호출합니다.예를 들어 :
1 + 2
는 암시 적으로 동등한 위의 식을 만든다 int.__add__
를 호출 1에 : 물론
>>> class Foo:
... def __add__(self, other):
... print("Foo.__add__ was called")
... return other + 10
...
>>> f = Foo()
>>> f + 1
Foo.__add__ was called
11
>>> f.__add__(1)
Foo.__add__ was called
11
>>>
, 실제로 (1).__add__(2)
를 사용 : 아래
(1).__add__(2)
는 데모입니다 1 + 2
대신에 불필요한 na가 포함되어 비효율적 (추한!)이됩니다. .
연산자를 사용하여 조회합니다. 상기 는 I은 일반적으로 운영자 심볼 관련하여 문제가 보이지 않는 (+
, -
, *
등) 단순히 관련 메소드 이름 (__add__
, __sub__
, __mul__
등) shorthands. 결국, 그들은 각각 같은 방법을 부름으로써 똑같은 일을 끝내게됩니다.
1 음, 거의 비슷. 으로 기록 된대로 은이며 특수 피연산자 세트에는 반사 피연산자를 처리하는 문자 r
이 접두사로 붙습니다. 예를 들어, 다음과 같은 표현 :
A + B
사실에 해당 될 수있다 : __add__
를 구현하지 않습니다 B.__radd__(A)
A
하지만 만약 B
는 __radd__
을 구현합니다.
어떤 방법을 언급하고 있습니까? 무슨 뜻인지 예를 들려 줄 수 있니? – BrenBarn
@BrenBarn이 말한 것을 반향시키기 위해, 나는 그 질문이 아주 분명하지 않다고 생각한다. – NPE