둘 다 인덱스를 가지지만 list는 를 사용하고 수정이 가능한 반면, tuple은 ()(소괄호)를 사용하고 수정이 불가능하다
서브루틴이 루틴에 종속되는 기존의 함수와 달리, 루틴과 서브루틴이 서로를 호출하는 비동기 방식
따라서 호출하면 코드를 한 번만 실행할 수 있는 일반함수와 달리, 진입점이 여러 개인 코루틴은 코드를 여러 번 실행할 수 있다
진입점?(entry point)
함수의 코드를 실행하는 지점
함수를 받아 명령을 추가한 뒤 이를 다시 함수의 형태로 반환하는 함수로 함수의 내부를 수정하지 않고 기능에 변화를 주고 싶을 때 사용한다
- Global Interpreter Lock의 약어로 파이썬에서만 존재하는 개념이다
- 여러 개의 스레드가 파이썬 바이트코드를 실행하지 못하게 막아서 한번에 하나만 사용할 수 있게 락을 거는 것으로 하나의 시점에 하나의 스레드만 실행된다
- CPU 연산의 비중이 큰 경우는 멀티 스레딩의 성능이 싱글스레드보다 떨어져서 GIL을 사용하는게 더 좋은 성능을 보인다
파이썬의 메소드 결정 순서로 기본적으로 다중 상속을 지원하는 파이썬에서 자식과 부모 클래스를 전부 포함하여 메소드의 실행 순서를 지정하는 것으로 죽음의 다이아몬드를 피할 수 있다.
스페셜 메소드(Special method) 또는 던더 메소드(Double UNDERscore method)라고도 불리며 이미 파이썬 내에 정의되어 있고, 클래스 내부에서 매직 메소드들을 오버라이딩 하여 사용할 수 있다.
- 특징
- 직접 호출해서 사용하지 않고, 정해진 규칙에 따라 알아서 호출된다
- 앞 뒤로 언더바가 두 개씩 붙는다
- init
- 객체가 생성되어 초기화 되는 즉시 호출하지만 메모리를 할당하지 않는다 -> 클래스 인스턴스를 생성하지 않는다
- new
- init과 달리 객체에 메모리를 할당하며 init이 실행되기 전에는 항상 new가 실행되고 메모리 할당은 이때 이뤄진다
- 반드시 오브젝트를 반환한다
- 그럼 init이 아니라 new가 생성자인가?
- No
- 일반적으로 우리가 아는 '객체 생성'은 new 메소드로 만든 인스턴스를 사용자가 원하도록 변경하는 것을 말하지만 '생성자'라는 단어에서 나타내는 생성은 객체가 생성되어 초기화 되는 즉시 호출하는 init으로 서로 다른 의미를 갖는다
(참고 : ryu-log, [python] new vs init)
__repr__
와 __str__
의 차이객체의 타입에 관계없이 데이터를 문자열 표현으로 반환한다는 공통점이 있으나
__repr__
은 해당 객체를 인간이 이해할 수 있는 표현으로 나타내기 위한 용도로 사용되는 반면,__str__
의 본질적인 목적은 서로 다른 자료형 간에 인터페이스를 제공하기 위해서 존재한다
(참고:Parkito's on the way!)
문자열 포매팅 방식들로 u와 r 외에 b와 f도 있다.
- r string은 r'' 사이의 무자열을 이스케이프 시퀀스(변환) 없이 그대로 저장해서 파일경로나 정규표현식에서 자주 쓰이며
- u sting은 unicode로 파이썬3 이후로는 없는 포매팅 방식이다
- 아직도
u''
가 존재하는 이유는 레거시 코드들과의 호환성 때문이다
명시적인 Call by Reference 혹은 Call by Value 라는 개념이 존재하지 않는 파이썬에서 함수에 인수를 전달하는 방식
- 파이썬은 모든 것이 객체이기 때문에 변수에 특정 값을 할당할 때, 그 값들이 실제로 변수에 저장되는 것이 아니라 새로운 객체가 생성되고 변수가 그 객체를 가르키는 방식으로 동작한다
클래스의 외부에서 클래스의 멤버 변수, 메서드, 생성자를 사용 가능 여부를 지정하는 키워드로 그 종류로는 어디서나 접근 가능한 public, 같은 패키지나 상속관계의 클레스에서만 접근 가능한 protected, 해당 패키지 내에서만 접근 가능한 default, 같은 클래스 내부에서만 접근 가능한 private가 있다.
사용하면 변수 선언시 전역변수로 간주되는 global과 달리 nonlocal은 전역변수를 제외하고 본인 스코프 바깥 방향으로 가장 가까운 변수를 찾는다
staticmethod는 부모 클래스의 클래스 속성값을 가져오지만 classmethod는 cls인자를 활용해서 클래스의 클래스 속성을 가져오기 때문에 상속에서 차이가 있다
ksundong/backend-interview-question