2014-07-08 1 views
2

연산자와 메서드간에 큰 차이점이 있습니까?연산자와 메서드의 차이점

내가 보는 유일한 차이점은 불리는 방식이며 다른 차이점이 있습니까?

예를 들어, 파이썬 연결에서 슬라이싱, 인덱싱은 연산자로 정의되고 (문자열 참조) upper(), replace(), strip() 등의 메소드가 정의됩니다.

+3

어떤 방법을 언급하고 있습니까? 무슨 뜻인지 예를 들려 줄 수 있니? – BrenBarn

+1

@BrenBarn이 말한 것을 반향시키기 위해, 나는 그 질문이 아주 분명하지 않다고 생각한다. – NPE

답변

1

내가 currectly 질문을 이해한다면 ... 간단히 말해서

는 모든 객체의 방법이다. operators에있는 파이썬 매직 클래스 메소드에서 "표현 연산자"메소드를 찾을 수 있습니다.

그래서 왜 파이썬은 [x:y], [x], +, -과 같은 "섹시한"것들을 가지고 있습니까? 대부분의 개발자들에게는 일반적인 사람들이기 때문에 개발 사람들에게 익숙하지 않은 사람 이어도 +, -과 같은 수학 함수는 인간의 시선을 사로 잡을 것이고 그 결과를 알게 될 것입니다. 색인 생성과 마찬가지로 많은 언어에서 일반적인 구문입니다.

그러나 upper, replace, strip 개의 메서드를 표현할 특별한 방법이 없으므로 "식 연산자"가 없습니다.

"표현식 연산자"와 메서드가 다른 점은 어떻게 보이는지 말하고 싶습니다.

2

귀하의 질문은 다소 광범위합니다. 예를 들어, 연결, 분할 및 색인 생성은 문자열의 경우 으로 정의되고의 경우 특수 구문 (예 : [])이 사용됩니다. 그러나 다른 유형은 사물을 다르게 할 수 있습니다.

사실, 대부분의 (나는 모든 것)의 동작은 magic methods에 의해 이루어 지므로, 실제로는 x + y과 같은 것을 쓰면 메소드가 호출됩니다.

실용적인 관점에서, 주요 차이점 중 하나는 사용 가능한 구문 연산자 집합이 고정되어 있으며 새로운 구문 연산자를 Python 코드로 추가 할 수 없다는 점입니다. 자신 만의 코드를 작성하여 $이라는 새 연산자를 정의한 다음 x $ y을 사용할 수 없습니다. 반면에 원하는만큼 많은 메소드를 정의 할 수 있습니다. 즉, 운영자에게 할당 한 행동 (있는 경우)을 신중하게 선택해야합니다. 제한된 수의 운영자 만 있으므로 일반적이지 않은 작업에서 "낭비하지"않도록하십시오.

1

연산자와 메서드간에 상당한 차이가 있습니까?

실제적으로 말하면, 각각의 운영자가 특정 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__을 구현합니다.

관련 문제