Call by Assignment란?
·
프로그래밍 언어/파이썬
파이썬에서는 "Call by Assignment" 또는 "Call by Object Reference"라는 메커니즘을 사용하여 함수에 인자를 전달합니다. 이 용어는 파이썬이 함수의 인자를 처리하는 방식을 설명하는 데 사용되며, "Call by Value"와 "Call by Reference"의 전통적인 구분과는 약간 다릅니다. Call by Assignment의 작동 원리: 변수 할당: 파이썬에서 변수에 값을 할당할 때, 실제로는 객체에 대한 참조를 생성하는 것입니다. 변수는 단지 메모리 상의 객체를 가리키는 이름일 뿐입니다. 함수 호출 시: 함수에 인자를 전달할 때, 객체 참조가 함수로 전달됩니다. 즉, 함수의 매개변수는 전달받은 객체에 대한 새로운 참조를 생성합니다. 가변 객체와 불변 객체: 불변 객..
r string, u string이란
·
프로그래밍 언어/파이썬
파이썬에서 문자열을 다룰 때, `r`문자열과 `u`문자열이라는 두 가지 특별한 문자열 표기법이 자주 사용됩니다. 각각의 표기법은 문자열을 정의할 때 특정한 목적을 가지고 있습니다. r 문자열(Raw String) r문자열은 이스케이프 시퀀스(예: \n(개행), \t(탭) 등)를 무시하고 문자열의 내의 모든 문자를 그대로 표현하고자 할 떄 사용됩니다. 즉, 백슬래시(\)가 특별한 처리 없이 일반 문자로 취급됩니다. 주로 정규 표현식과 같이 백슬래시를 자주 사용하는 문자열에서 유용하게 사용됩니다. 이는 백슬래시를 이스케이프할 필요 없이 편리하게 문자열을 정의할 수 있게 합니다. raw_string = r"C:\Users\Example\Documents" print(raw_string) # 출력: C:\Use..
__repr__, __str__의 차이점
·
프로그래밍 언어/파이썬
__repr__와 __str__는 파이썬에서 객체를 문자열로 표현하기 위해 사용되는 두 가지 매직 메소드입니다. 이 둘은 비슷해 보일 수 있지만, 사용 목적과 호출되는 상황에서 차이가 있습니다. __repr__ 메소드: __repr__의 주 목적은 객체의 공식적인 문자열 표현을 제공하는 것입니다. 이 문자열은 가능한 한 해당 객체를 정확하게 나타낼 수 있어야 합니다. 이상적으로는, __repr__에 의해 반환된 문자열을 사용하여 해당 객체를 재생성할 수 있을 정도로 정확해야 합니다(예: eval(repr(object)) == object). __repr__는 주로 개발자가 사용하며, 디버깅과 로깅에서 유용하게 활용됩니다. 파이썬 인터프리터에서 객체를 단독으로 평가했을 때 보이는 결과는 __repr__ 메..
__new__, __init__ 차이점
·
프로그래밍 언어/파이썬
__new__와 __init__는 객체 지향 프로그래밍 언어인 파이썬에서 클래스의 인스턴스 생성 과정에 관여하는 두 가지 특별한 메소드입니다. 이 둘은 서로 다른 목적과 시점에서 호출되며, 객체의 생명주기에서 중요한 역할을 수행합니다. __new__ 메소드: __new__는 클래스의 새 인스턴스를 생성할 때 호출되는 클래스 메소드(class method)입니다. __new__는 클래스의 첫 번째 인수로 전달되며, 반드시 object를 반환해야 합니다. 이 메소드는 인스턴스가 메모리에 할당되기 전에 호출됩니다. __new__ 메소드는 주로 불변 타입이나 싱글톤 패턴과 같이 인스턴스 생성 과정을 커스텀하게 제어할 필요가 있을 때 오버라이드합니다. __new__의 주요 목적은 인스턴스를 생성하고 반환하는 것입..
매직메소드란?
·
프로그래밍 언어/파이썬
파이썬의 매직 메소드(magic methods)는 더블 언더스코어(double underscores)로 시작하고 끝나는 특별한 메소드입니다(예: __init__, __str__). 이러한 메소드는 파이썬의 내장 동작과 밀접하게 연관되어 있으며, 파이썬의 데이터 모델을 정의하는 데 사용됩니다. 클래스 내에서 이러한 매직 메소드를 구현함으로써, 클래스의 인스턴스들이 내장 타입처럼 동작하게 하거나 특정 파이썬 문법에 반응하도록 할 수 있습니다. 매직 메소드와 다른 메소드 타입의 차이점: 매직 메소드: 파이썬의 특별한 동작을 구현하기 위해 미리 정의된 이름을 가진 메소드입니다. 예를 들어, 객체의 생성과 초기화를 담당하는 __init__, 객체를 문자열로 표현하기 위한 __str__, 두 객체의 비교를 위한 _..
MRO(Method Resolution Order)
·
프로그래밍 언어/파이썬
파이썬에서 MRO(Method Resolution Order)는 클래스에서 메서드를 검색할 때 사용되는 순서를 말합니다. 특히 파이썬의 클래스 상속이 다중 상속을 포함할 수 있기 때문에, 어떤 순서로 메서드를 찾아야 할지 결정하는 규칙이 필요합니다. 파이썬은 이를 위해 C3 선형화 알고리즘을 사용하여 클래스의 MRO를 결정합니다. 이 알고리즘은 클래스의 상속 구조를 선형 리스트로 변환하여, 메서드 호출 시 어떤 클래스의 메서드를 사용할지 명확하게 합니다. MRO의 중요성 MRO는 다중 상속 시 발생할 수 있는 복잡성과 모호성을 해결합니다. 특정 메서드를 호출할 때, 파이썬은 이 MRO 리스트를 따라서 해당 메서드를 가진 첫 번째 클래스를 찾아 그 메서드를 실행합니다. 이는 프로그램의 일관성을 유지하고 예..
GIL(Global Interpreter Lock)
·
프로그래밍 언어/파이썬
python Interpreter GIL 이해를 위해 수행되어야 하는 것은 파이썬 인터프리터의 이해입니다. 파이썬 인터프리터 : 파이썬 문법으로 작성된 코드를 한 줄씩 읽으면서 실행하는 프로그램 파이썬 인터프리터의 표준은 CPython입니다. C언어를 이용하여 구현한 파이썬 인터프리터입니다. GIL(Goloba Interpreter Lock) 전역 인터프리터 락. 위키에서의 정의는 아래와 같음. > In CPython, the global interpreter lock, or GIL, is a mutex that protects access to Python objects, preventing multiple threads from executing Python bytecodes at once. This..
데코레이터란?
·
프로그래밍 언어/파이썬
뭐지? 파이썬의 데코레이터는 함수나 메소드의 변환을 위해 사용되는 함수입니다. 데코레이터를 사용하면 기존의 코드를 수정하지 않고도 함수의 기능을 확장하거나 변경할 수 있습니다. 이는 코드의 재사용성을 높이고, 가독성을 향상시키며, 유지보수를 용이하게 합니다. 데코레이터는 @(골뱅이) 기호를 함수 위에 적용하게 됩니다. 데코레이터는 실행시간에 함수를 감싸서(wrap) 실행 전후에 추가적인 코드를 실행할 수 있게 해주며, 이를 통해 함수의 행동을 수정합니다. 기본구조 def my_decorator(func): def wrapper(): # 여기에 함수 호출 전 실행할 코드를 작성합니다. print("함수 호출 전") func() # 여기에 함수 호출 후 실행할 코드를 작성합니다. print("함수 호출 후"..