-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
함수 또한 객체라는 것과 관련
21.07.28 14:41 작성 조회수 122
2
(Code 1)
def add1(a, b):
return a + b
print(add1(2, 3))
(Code 2)
class Cal:
def __init__(self):
pass
def __call__(self, a, b):
return (a + b)
add1 = Cal()
print(add1(2, 3))
(Code 1)을 실행할 때, 파이썬 내부에서는 (Code 2)가 발생하고 있다고 이해해도 될까요?
답변을 작성해보세요.
2
김백현
질문자2021.07.28
자꾸 여쭤봐서 죄송합니다. 의문이 물밀듯이 생겨나서요. ㅠㅠ
import numpy as np
a = np.arange(9)
x = a.reshape(3, 3)
b = x.transpose()와 c = np.transpose(x) 모두 외관상 동일한 결과물을 반환하되, id(b) != id(c)인데요
질문. 내가 transpose를 해주는 패키지를 만든다고 할 때, 그 기능을
c처럼 매직메서드(init 혹은 call?)로 구현할 것인지
b처럼 non 매직 메서드로 구현할 것인지
아니면 b와 c를 둘 다 가능하게 할 것인지
를 정할 때, 어떤 점들을 고려하는가요?
윤상석
지식공유자2021.07.28
질문. 내가 transpose를 해주는 패키지를 만든다고 할 때, 그 기능을
c처럼 매직메서드(init 혹은 call?)로 구현할 것인지
b처럼 non 매직 메서드로 구현할 것인지
아니면 b와 c를 둘 다 가능하게 할 것인지
를 정할 때, 어떤 점들을 고려하는가요?
우선, b의 경우 transpose는 인스턴스 메서드이고 c의 경우 transpose는 클래스 메서드입니다.
numpy를 만든 개발 팀 입장에서는 방법에 차이이기 때문에 단순히 개발자의 편의를 위해 둘 다 접근해서 사용할 수 있도록 제공해준 것입니다.
결국 개발자가 어떤 방식으로 사용하는 것이 가독성이 있을 지 선택하는 것이죠.
++ 머신러닝에서 코드를 돌릴 때 두 가지 방법 모두 성능상 차이가 없습니다. 가독성을 위해 어떤 방식으로 코드를 작성하면 좋을 지 생각하시면 될 것 같습니다.
답변 2