05의 개발 계발

[TIL] 230323 [python] .sort 와 sorted()의 차이 (Method 와 Function) 본문

TIL

[TIL] 230323 [python] .sort 와 sorted()의 차이 (Method 와 Function)

생각하는 코댕이 2023. 3. 23. 00:10
728x90

TIL 학습목표

  • method와 function, class의 개념과 관계를 이해한다.
  • built-in method 인 .sort와 built-in function인 sorted()의 차이와 사용법을 안다.

1) 문제점 (Problem)

지난 포스팅에서 코드를 축약하려고 아래와 같이 .sort 의 위치를 옮겨보았다.
하지만 None이라는 값이 출력되었다.

#기존코드
    No_1=[k+1 for k in range(0,3) if max(score) == score[k]]
    No_1.sort()
    return No_1
#수정코드
    No_1=[k+1 for k in range(0,3) if max(score) == score[k]].sort()
    return No_1

결과

결론적으론 .sort 의 사용법이 잘못되었다.
.sort는 Class의 method로서 객체에 담아 사용할 수 없다.
+230409 정확한 표현은 .sort는 return 값이 없고 동작만 하는 method 이므로, None을 return해준다!
다른 예로, .pop 의 경우 요소(item)를 제거하고, 제거한 요소를 return해주기 때문에 a=list.pop() 처럼 객체에 담아 활용이 가능하다. 

이 문제를 이해하기 위해 학습을 진행하였고, 구글링과 python docs, 파이썬 심화 강의를 참고하였다.
그 내용을 정리해보도록 하자.


2) 시도해본 것들 (Try)

학습을 통해 이해한 것들을 정리해보자.

.sort와 sorted() 사용법

먼저 코드와 결과를 통해 사용법을 살펴보자.

L = [4, 3, 1, 2]

print("▼▼▼기존 리스트▼▼▼")
print(L)  # L을 출력

print("▼▼▼sort method사용▼▼▼")
L.sort()  # L을 오름차순 정렬하라 메소드(method)사용
print(L)  # L 재출력

print("-------------------------------------------")

L = [4, 3, 1, 2]

print("▼▼▼기존 리스트▼▼▼")
print(L)  # L을 출력

print("▼▼▼sorted fuction사용▼▼▼")
L_1 = sorted(L)  # 함수(fuction)은 객체(object)에 담아야 의미가 있다.

print(L_1)

결과

.sort와 sorted() 모두 오름차순 정렬을 해준다. 즉, 같은 기능을 가진다.

(+) 용도 파악하기
 .sort  는 기존의 리스트를 정렬 후 저장한다. 기존 리스트를 이후에도 정렬된 값으로 사용할 때 사용
 sorted() 는 새로운 객체에 정렬된 값을 저장한다. 기존 리스트와 별개로, 정렬된 값을 저장하여 다룰 때 사용

.sort는 객체(object)에 담지 않고 실행하였고, sorted()는 객체(object)에 담아 실행하였다.
*위 코드에서 객체(object)는 L_1이다

이는 Method 와 function의 차이로 인해 일어나는 것이고, 이를 이해하기 위해 용어들을 정리해보자.


▶Class, Method, function 의 관계

.sort는 built-in method(내장메소드) 이고, sorted()는 built-in function(내장함수) 이다.
용어를 정리해보자.

함수(function) // 동작을 반복하는 명령 묶음. 일반적으로 얘기하는 함수이다. ex) def sum(a,b)
클래스(class) // 객체변수들과 메소드들의 묶음
메소드(Method) // 클래스 안에서 구현된 함수
. // 도트 연산자 - 클래스의 메소드를 호출할 때 사용 ex) list.sort()
내장함수(built-in function) // 기본적으로 python이 가지고 있는 함수 ex) sorted()
내장클래스(built-in class) // 기본적으로 python이 가지고 있는 클래스 ex) list
내장메소드(built-in method) // 기본적으로 python이 가지고 있는 메소드 ex) .sort

여기서 class의 개념이 중요하지만, 너무 방대하니 따로 class 참고자료를 보도록 하자.

결국, 메소드와 함수는 같은 함수의 개념이지만. 클래스 안에서 정의된 함수를 메소드라고 부르는 것이다.
그리고 메소드(클래스 안의 함수)는 도트연산자(.)를 통해서 사용할 수 있다. ex) list.sort()

vscode 에서는 내장코드들을 Ctrl + 마우스Click으로 확인해 볼 수 있다.

.sort 는 method이고, sorted()는 function임을 볼 수 있다.
.sort 는 list라는 내장클래스에 속한 내장메소드임을 볼 수 있다.
sorted()는 클래스에 속하지 않고, 내장함수임을 볼 수 있다.


3) 해결 (Solution)

메소드(method)는 도트연산자(.)로, 함수(function)는 객체(object)로 담아서 실행

이처럼 클래스에 속한 함수인 메소드는 도트연산자로 실행시켜야하고,   L.sort() 

일반 함수는 변수라는 객체에 담아서 실행해야 한다.   L_1 = sorted(L) 

앞으로 클래스를 자주 활용할텐데, 이 점을 숙지한체로 코딩을 하도록 하자.


4) 알게 된 점  (Learnd)

method와 function, class의 개념과 관계를 학습했다.
또한 내장코드를 보는 방법과 내장코드를 봄으로써 클래스나 함수, 메소드를 생성하는 방식을 참고 할 수 있는 이점이 있었다.
docs를 활용하고, 내장코드를 보는 것을 권장하는 이유가 무엇인지 알 것 같다.
느리더라도 확실히 이해하면서 오늘도 성장하자.

728x90