1. 컴파일 언어와 인터프리터 언어의 차이점에 대해 설명하세요.

    컴파일된 언어는 컴파일러를 통해 구현되며 소스 코드를 기계어로 바꾸는 과정을 사전에 처리 하여 빠르게 컴퓨터에서 구동될 수 있도록 한 방법 이며, 인터프리터 언어는 대부분 소스코드를 기계어로 컴파일하지 않고 인터프리터를 통해 소스코드 실행시 각 스테이트먼트(소스코드 구문)를 하나 이상의 서브루틴 순서로 변환한 후, 기계어나 바이트코드등 다른 언어로 변환되어 구현됩니다.

  2. 파이썬에는 .pyc 파일이 있습니다. .py 파일과의 차이점을 설명하세요.

    두 파일 모두 바이트코드를 가지고 있지만 .pyc는 .py 파일의 컴파일된 버전입니다. 플랫폼에 독립적인 바이트코드를 가지고 있습니다. 따라서, 우리는 .pyc 형식을 지원하는 어떤 플랫폼에서도 그것을 실행할 수 있으며, Python은 성능을 향상시키기 위해 자동으로 .pyc 파일을 생성합니다. .pyc 파일은 PVM(Python Virtual Machine)에 의해 실행되고, 지워도 되지만, 성능 저하가 생길 수 있습니다.

  3. 파이썬은 객체지향 입니까? 왜 그렇습니까?

    파이썬은 객체 지향 프로그래밍 패러다임을 따르고 있습니다. 객체 지향 패러다임은 클래스와 인스턴스를 중심으로 돌아갑니다.

    객체지향 프로그래밍 패러타임의 기능

    추상화 : 공통의 속성이나 기능을 묶어 이름을 붙이는 것, 객체 지향적 관점에서는 클래스를 정의하는 것. 객체들이 가진 공통의 특성을 파악하고 불필요한 특성들은 제거하는 과정

    캡슐화 : 객체의 속성과 메서드들을 하나의 클래스로 묶는 것, 실제 구현 내용을 감추는 것(은닉화), 클래스 이름으로 기능을 유추할 수 있고, 내부 내용까지 알 필요가 없기에 코드관리 편의성, 가독성 재사용성이 올라간다.

    상속성 : 부모 클래스의 속성과 메서드를 상속받아 동일하게 사용하는 것, 범용적인 클래스 활용하여 여러 클래스에서 이용하는 등, 재사용성이 올라간다.

    다형성 : 동일 요청에 대해 서로 다른 방식으로 응답할 수 있도록 만드는 것.(자바-오버로딩), 부모 클래스의 함수를 재정의하여 사용하는 것도 가능하다.(자바-오버라이딩)

    다른 언어 처럼 접근 권한을 나눌 수 없는 파이썬은( Java의 private변수, public변수 처럼) 클래스 데이터의 접근하는데 제한을 두지 않습니다. 언더스코어를 사용하는 방법이 있지만, 클래스안에 메소드를 포함한 모든 데이터를 완벽하게 외부접근으로 부터 차단하는 것이 어렵습니다.

    완벽하게 막을 수 없을 뿐 기본적인 감추기가 불가능 한건 아닙니다. 언더스코어를 사용하여 감추는 방법이 있습니다.

  4. try… except… else 구문에서 else는 언제 실행되나요?

    if..else 블록에서는 if 조건문이 False 일때 else 구문이 실행되지만, try… except… else 구문에서는 try 구문에서 exception이 생기지 않는 경우에만 else 구문이 실행 됩니다.

  5. list append 와 list extend 의 차이점을 설명하세요.

    list append는 객체를 해당 리스트 제일 뒤에 붙이고, list extend는 다른 리스트의 요소를 다른 리스트의 요소로 추가하여 붙이는데 사용합니다.

  6. Python은 open()을 통해 파일을 열 때, 파일 처리 모드를 설정합니다. 어떤 모드가 있나요?

    파이썬에 파일 처리 모드 종류는 다음과 같습니다.

    읽기 전용 – ‘r’

    쓰기 전용 – ‘w’

    읽기-쓰기 – ‘rw’

    덧붙이기 – ‘a’

    또한, ‘t’ 옵션으로 텍스트 파일을 열 수 있는데요. 그래서 읽기위해 텍스트 파일을 열려면 ‘rt’ 모드를 사용할 수 있습니다. 그리고 이진(바이너리) 파일의 경우 ‘b’를 사용합니다.

  7. Python 에서 map() 함수는 어떤 역할을 하나요?

    파이썬에서 map() 함수는 2개의 인수를 받습니다. 첫 인수는 함수이고, 두번째 인수는 이터러블(iterable - 개별 원소를 반복적으로 셀수 있는 데이터 타입 - 리스트, 튜플)을 받습니다.

    이 이터러블에서 순서대로 각 요소를 해당 함수에 넣어 함수를 실행한 값을 리턴합니다.

  8. try…raise…finally 구문이 어떻게 작동하는지 설명해 주세요.

    이 구문은 우리가 예외 처리를 할 때 사용하는 키워드들 입니다. 우리는 try 블록 안에 오류가 발생할 가능성이 있는 코드를 넣고, raise 구문으로 오류를 명시적으로 제기하며, 어쨌든 마지막으로 실행하고자 하는 코드를 finally 블록에 씁니다.

  9. 파이썬에서 언더스코어(_) 는 언제 사용하나요?

    파이썬에게 언더스코어는 조금 특별합니다. 인터프리터가 사용하고, 값을 무시하고 싶을때나, 변수 앞뒤에 붙여 다른 의미로 사용하기도 합니다. PEP 15에서는 숫자 리터럴의 자릿수 구분자 역할이 추가되었습니다.

  10. 파이썬에서 switch… case 구문을 구현해 보았나요? 어떻게 하셨나요?

파이썬에는 사실 Switch-case 구문이 없습니다. 파이썬에서는 딕셔너리 맵핑으로 Switch-Case를 구현할 수 있으며, 더 좋은 가독성을 확보합니다.
  1. 파이썬의 주요 특징에 대해 이야기 해보세요.

    파이썬은 인터프리터 언어 이며, 동적타이핑 언어 입니다. 파이썬은 객체지향언어 이고, 간결하고 단순하며 엄청난 크기의 커뮤니티의 지원을 받고 있습니다.

  2. 파이썬에서 list와 tuple의 차이점에 대해 말해보세요.

    list는 데이터를 변경할 수 있고, tuple은 변경이 할 수 없습니다.

  3. 파이썬의 삼향연산자(ternary operator)에 대해 설명하세요.

    자바스크립트나 C++과 달리 파이썬에는 삼향연산자가 없습니다. 하지만 파이썬에게는 비슷한 역할을 하는 다른 기능이 있습니다.

    [Returning Value on True] if [Conditional Statement] else [Returning Value on False]

  4. 리스트에서 음수 인덱스를 사용하면 어떻게 되나요?

    음수 인덱스를 사용하면 가장 오른쪽 데이터를 기준으로 -1이 첫 번째 데이터 이며, 오른쪽부터 검색을 시작합니다.

  5. 변수나 함수 같은 식별자 길이의 제한이 있나요?
  6. 공식 파이썬 문서에서는 제한이 없다고 나와 있습니다. 하지만 PEP-8 가이드라인은 한줄 최대 79자를, PEP-20은 가독성이 중요하다고 표현하고 있습니다. 그래서 너무 긴 식별자는 PEP-8과 PEP-20을 위반합니다.

  7. pass와 continue의 차이는 무엇인가요?

    파이썬은 함수등을 작성할때 반드시 무언가를 써야 문법적으로 올바르기 때문에, pass를 사용하여 문법 오류를 막을 수 있습니다. continue는 반복문에서 해당 반복문을 해당 위치에서 더이상 진행하지 말고 다음 이터레이션으로 넘어가게 하는 것입니다.

  8. 파이썬에게 어떤 약점이 있나요?

    파이썬은 인터프리터 언어로 속도의 약점이 있습니다.

    파이썬은 많은 것을 할 수 있지만, 모바일 컴퓨팅에 약점이 있고 브라우저안에서 JavaScript 처럼 객체를 다룰 수 없습니다.

    동적타이핑 언어이기 때문에 덕타이핑(Duck-typing)을 사용합니다. 여기서 런타임 에러가 발생할 수 있습니다.

    *덕타이핑 : 타입을 미리 정하는게 아니라 실행이 되었을 때 해당 Method들을 확인하여 타입을 정한다.

  9. 이썬에서 현재 작업중인 디렉토리를 확인하는 방법이 무엇인가요?

    os 모듈안에 getcwd(get current working directory) 메소드를 사용하면 됩니다.

  10. 파이썬 빌트인 함수에 대해 아는대로 말해보세요.

    complex()

    eval()

    filter()

    format()

    hash()

    hex()

    len()

    open()

    min()

    max()

    abs()

    sum()

    ….

  11. 리스트에서 중복값을 제외 하려면 어떻게 해야 하나요.

    리스트를 set으로 변경하면 됩니다.

  12. 오퍼레이터중 //, % , ** 에 대해 설명하세요.

    // 는 나눗셈 후 내림한 정수를 반환합니다.

    %는 나눗셈 후 나머지를 반환합니다.

    ** 는 제곱값을 반환합니다. 2**3은 2의 3승(세제곱)입니다.

  13. Django와 Flask

    Flask는 약 27,000줄 밖에 안되는 가벼운 프레임워크이기 때문에, 개발자가 거의 모든 것을 설정하고 세팅해야 하는 번거로움이 있습니다. 반면, Django는 이의 10배나 무거운 프레임워크입니다. 당신이 생각하는 (그 무엇을 생각하던) 이미 거의다 개발되어있고, 그냥 레고놀이 하듯이 블럭쌓기처럼 쌓아만 가도 멋진 웹을 서빙할 수 있을거에요.

  14. 버그를 찾거나 정적 분석을 할수 있는 어플리케이션이 있나요?

    :pychecker, 정적 분석에 사용.

    pylint, 파이썬 모듈들이 표준 코딩을 만족하는지 체크.

  15. 리스트와 튜플의 주된 차이점은 무엇인가요?

    리스트는 mutable하고 튜플은 immutable 합니다.

  16. 파이썬에서 메모리는 어떻게 관리되나요?

    파이썬에서는 개별적인 힙을 사용해서 메모리를 유지합니다. 따라서 힙은 모든 파이썬 객체와 자료구조를 가지고 있습니다.

    이 영역은 파이썬 인터프리터만이 접근 가능하며 프로그래머는 사용할 수 없습니다.

    또한 파이썬은 빌트인된 가비지 컬렉터를 통해서 비사용되는 메모리에 대해서 힙공간을 관리합니다.

  17. Lambda와 Def의 주된 차이점은 무엇인가요?

    Def는 다중 표현을 갖습니다. 반면에 lambda는 단일 함수입니다.

    Def는 함수를 생성하고 이름을 지정하여 나중에 다시 호출합니다. Lambda는 함수 객체를 구성하고 반환합니다.

    Def는 선언을 반환할수 있지만, Lambda는 할수 없습니다.

  18. Docstring은 무엇인가요?
: Docstring은 파이썬의 모듈, 함수, 클래스, 매소드의 정의에 처음 부부에 선언되는 유니크한 텍스트입니다. 
  1. Function call 혹은 A callable Object는 무엇인가요?

    파이썬에서 함수는 호출가능한 객체로 취급됩니다.

  2. Call by value는 무엇인가요?

    표현식 또는 값이 함수의 각 변수에 바인딩되는지 여부에 대한 인수입니다.

    파이썬은 그 변수를 함수 수준 범위에서 로컬로 취급합니다. 해당 변수에 대한 모든 변경사항은 로컬로 유지되며 함수외부에 반영되지 않습니다.

  3. 파이썬에서 call by reference는 무엇인가요?

    call by reference 와 pass by reference는 서로 바꿔 사용할수 있습니다. 참조로 인수를 전달하면 간단한 복사가 아닌 함수에 대한 암시적 참조로 사용할 수 있습니다. 이 경우 인수에 대한 모든 수정 사항도 호출자에게 표시됩니다.

  4. *Args는 무엇을 하는 기능인가요?

    이것은 N개의 매개변수를 넘기겠다는 표시입니다,

  5. *Kwargs는 무엇을 하나요?

    N개의 변수의 파라미터를 넘기겠다는 것인데 이때 이름 혹은 키워드를 가지고 있습니다.

  6. 파이썬에서 Main() 메소드가 있나요?

    파이썬은 인터프리터 언어이기 때문에 일반적으로는 code by code로 실행됩니다.

    현재 모듈 이름을 확인하는 방식으로 main함수를 사용할수 있습니다.

  7. GIL이란 무엇인가요?

    글로벌 인터프리터 락으로 파이썬 객체가 다중 스레드가 동시에 실행되지 않도록 하는 것입니다.

  8. 파이썬에서 쓰레드의 안정성은?

    파이썬에서는 쓰레드에 대해 안정성있는 접근을 보장합니다. 이를 위해서 GIL(global interpreter lock)을 사용합니다.

    만약 쓰레드가 GIL lock을 잃었을 경우에 쓰레드로부터 코드를 안정성있게 만들어야 합니다.

  9. 파이썬에서는 어떻게 메모리를 관리하나요?

    파이썬에서는 내부적으로 힙 매니저가 구현되어 있습니다. 힙 매니저는 모든 오브젝트와 자료구조를 가지고 있습니다.

    또한, 힙매니저는 오브젝트에 대한 힙 스페이스의 할당과 할당 해제를 합니다.

  10. 이썬에서 튜플은 무엇인가요?

    튜플은 collection데이터 타입의 하나로 immutable한 자료형입니다. 리스트와 비슷한 구조를 갖지만 수정이 가능하냐 안하냐는 차이가 있습니다.

  11. 파이썬에서 딕셔너리는 무엇인가요?

    딕셔너리는 collection데이터 타입의 하나로서 key와 value의 구조로 이뤄진 데이터 타입입니다. 해쉬, 맵 혹은 해쉬맵이라고도 불립니다.

  12. 파이썬에서 Set은 무엇인가요?

    Set은 순서가 없는 (unordered)한 collection 데이터 객체의 하나로 유니크한 원소들만들 갖습니다.

  13. 파이썬의 딕셔너리는 어떻게 사용되나요?

    딕셔너리 타입은 하나의 그룹(key)과 다른 그룹(value)을 매핑하기 위해서 사용될수 있습니다.

  14. 파이썬의 리스트는 연결리스트(linked list)인가요?

    파이썬의 리스트는 가변길이 배열로 C스타일의 연결리스트와는 다릅니다.

    내부적으로 다른 객체를 참조하기 위한 연속적인 배열을 가지며, 배열 변수에 대한 포인터와 그 길이를 목록 헤드 구조에 저장합니다.

  15. 파이썬에서 클래스는 무엇인가요?

    파이썬은 객체지향 프로그래밍을 지원하며 거의 모든 OOP특징을 사용할수 있도록 제공합니다.

    파이썬의 클래스는 객체를 만들기 위한 청사진입니다. 이것은 멤버 변수를 정의하고 그 변수들 사이의 행동을 가집니다.

  16. 파이썬의 클래스에서 Attributes와 Methods는 무엇인가요?

    기능을 정의하지 않은 클래스는 쓸모가 없습니다. 속성을 추가하므로 이 문제를 해결할 수 있는데, 속성은 데이터와 기능을 위한 컨테이너 역할을 합니다. 또한, Attribute를 직접 class 내부에 추가할수도 있습니다.

    Attributes를 추가한 후에 기능을 정의 합니다. 일반적으로 이 기능을 Methods라고 부릅니다.

  17. 런타임에 클래스 속성에 값을 할당하는 방법은 무엇인가요?

    클래스에 init 메소드를 추가하고 최초에 변수를 입력해줍니다.

  18. 파이썬에서 상속은 무엇인가요?

    상속이란 OOP에서 객체가 부모 클래스의 특징에 접근할 수 있는 것을 말합니다.

  19. 파이썬에서 Composition은 무엇인가요?

    composition은 파이썬에서 상속의 한 종류입니다.

    기본 클래스에서 상속을 하지만 파생 클래스의 멤버 역할을 하는 기본 클래스의 인스턴스 변수를 사용합니다.

  20. 파이썬에서 Erros와 Exceptions는 무엇인가요?

    Erros는 코딩 이슈로서 프로그램이 비정상적으로 종료되게 됩니다.

    Exceptions는 외부적인 이벤트로 인해 발생하는 것으로 인터럽트 같은 경우가 있습니다.

  21. Try / Exception / Finally는 어떻게 사용하나요?

    ex)

    try:

    ​ print(“Executing code in the try block”)

    ​ print(exception)

    except:

    ​ print(“Entering in the except block”)

    finally:

    ​ print(“Reached to the final block”)

  22. 파이썬에서 미리 정의된 조건에 대한 Exceptions를 어떻게 발생 시키나요?

    ex)

    while True:

    ​ try:

    ​ value = int(input(“Enter an odd number- “))

    ​ if value%2 == 0:

    ​ raise ValueError(“Exited due to invalid input!!!”)

    ​ else:

    ​ print(“Value entered is : %s” % value)

    ​ except ValueError as ex:

    ​ print(ex)

    ​ break

  23. 파이썬의 Iterators는 무엇인가요?

    Iterators는 배열과 같은 객체로서 다음 구성 성분으로 이동하는 것이 가능합니다.

    next() 메소드로 데이터를 순차적으로 호출 가능합니다.

  24. iterators와 itrable의 차이는 무엇인가요?

    리스트, 튜플, 딕셔너리 및 세트와 같은 컬렉션 유형은 모두 반복 가능한 객체 인 반면 순회하는 동안 반복자를 반환하는 반복 가능한 컨테이너이기도합니다.

    iterable은 하나씩 차례로 반환 가능한 객체입니다. iter, __getiterm__메소드로 정의된 class들이 iterable하다고 할수 있습니다.

    iterable을 iterator로 변환하고 싶다면, iter()라는 빌트인 함수를 사용하면 변환 가능 합니다.

  25. 파이썬의 generator는 무엇인가요?

    generators는 iterator를 생성하는 함수입니다. yield 키워드를 사용하여 반환합니다.

    yeild는 return과 달리 반환 후에 종료되지 않고 그 상태를 유지합니다.

    generator를 사용할 경우의 이점으로는 memory를 효율적으로 사용할 수 있다는 것입니다.

    list compression을 통한 방법과 generator의 방법을 비교해보면 LC는 리스트를 모두 메모리에 올리기 때문에 그 크기만큼 메모리를 차지하는 사이즈가 커집니다. 하지만 generator는 next()메소드로 차례로 값에 접근하여 메모리에 올리게 됩니다.

    - 함수 내 yield를 통해 데이터 하나씩 return

  26. 파이썬에서 Closures는 무엇인가요?

    Closures는 함수 객체로서 다른 함수를 반환합니다. 더 구체적으로는 파이썬의 내부함수의 예시가 있습니다.

    Clossure는 일반 함수와 다르게 자신의 영역밖에서 호출된 함수의 변수값과 레퍼런스를 복사, 저장, 접근을 가능하게 합니다.

  27. 파이썬에서 Decorators는 무엇인가요?

    함수 객체에 새로운 기능을 추가하는 것을 쉽게 할수 있는 방법입니다.

  28. 파이썬의 Enumerate는 무엇인가요?

    iterators와 함께 사용 가능한 것으로 iterations의 횟수를 셀수 있습니다.

  29. .파이썬의 Globals() 함수는 무엇인가요?

    global로 정의된 변수들을 딕셔너리 테이블처럼 반환할수 있습니다.

  30. “Self”는 어떤 키워드 인가요?

    self는 객체 인스턴스가 가지고 있는 변수들을 나타냅니다.

  31. 파이썬 프로그램에서 어떻게 코드를 디버깅 하나요?

    python debugger(pdb)를 사용하면 됩니다.

  32. 파이썬의 주요특징은?

    - interpreted language : 실행 전 컴파일이 필요 없음

    - dynamically typed : 변수 사용 전 선언할 필요 없음

    - 객체지향적 프로그래밍 : 상속 등과 함께 class(객체) 정의 허용

    - 함수가 first-class object : 변수에 할당 가능, 다른 함수에서 반환 및 전달 가능

  33. pypy??

  1. PEP 8
\- 파이썬 개선 제안서 : 어떻게 코드 구상할지 알려주는 스타일 가이드
  1. memory 관리

    - python private heap space에서 관리됨

    - 내장된 garbage collector가 있어서 사용되지 않는 메모리 재사용 가능

  2. namespace

    - 이름 충돌 피하기 위해 고유한 이름인지 확인하는 이름 지정 시스템

  3. 대소문자 구별?

    - Python은 대소문자를 구별하는 case-sensitive한 언어

  4. Array와 List 차이

    - array : 요소의 data type이 동일해야 함 (import array)

    - list : 요소의 data type 상관 없음

  5. lambda 함수

    - 이름이 정해져 있지 않은 함수로, 여러 parameter 받아 결과 return

    - a = lambda x,y : x+y

  6. [::-1] 의미

    - 순서 반대로

  7. pickling과 unpickling

    - pickle : 어떤 객체도 문자열 표현으로 변환하여 파일로 dump (import pickle; pickle.dump(dir, file);)

    - unpickling : 저장된 문자열 표현에서 객체로 변환

  8. Python 나갈 때 왜 모든 memory가 할당 해제되지 않는지?

    - C에서 예약된 메모리 할당 해제는 불가능

  9. numpy array 장점 (list와 비교했을 때)

    - list는 vector화된 작업(addition, multiplication) 지원 X

    - numpy array가 더 빠르고 효율적

  10. Shallow / Deep copy

    - Shallow copy : 새로운 instance가 생성될 때 사용

    - Deep copy : 이미 복사된 값 저장할 때 사용

  11. Multithreading

    - 멀티스레딩 패키지가 있음

    - 하지만 Python은 GIL(Global Intervirator Lock) 구조로 되어있기 때문에 멀티스레딩을 하더라도 같은 CPU가 교대로 작업됨

  12. 메모리 관리

    이렇게 성능이 낮음에도 인기가 많은 파이썬은 객체의 생성과 소멸을 reference count를 통해서 관리한다.

    refcount란 객체가 가지고 있는 속성으로 자신을 몇군데에서 참조하고 있는지에 대한 속성이다.

    그리고 인터프리터는 refcount를 검사해서 해당 객체의 메모리는 회수할지를 결정한다.

    파이썬에서는 이렇게 메모리 관리가 자동으로 되고 있다.

  13. GIL

    - 파이썬 코드는 인터프리터를 통해 실행된다.

    - 파이썬의 객체는 덩치가 크고 ref count를 통해서 메모리 관리가 이루어진다.

    위 두가지 사실로 인터프리터는 객체에 참조가 생기가나 해제될 때마다 refcount를 +- (증감)하게 된다. 쓰레드 간에 공유하는 객체가 있다면 객체를 참조하는 연산(=)은 경쟁 상태(race condition)가되고 모든 객체에 대해서 참조가 증가 또는 감소될 때 lock을 걸어야 한다는 의미가 된다. 즉 모든 객체가 크리티컬 섹션이 된다.

    정수 변수 하나까지 객체로 다루는 파이썬에서는 이렇게 객체마다 lock을 걸어야 하는 작업은 매우 비효율적 일 수 밖에 없다.

    그래서 파이썬은 인터프리터를 락을 걸어버렸다. 쓰레드가 몇개건 CPU 코어에 관계없이 인터프리터를 사용하는 쓰레드는 오직 1개로 만들었다. 당연히 특정 객체에 대한 동시접근은 해결된다.

  14. Monkey Patching

    - 런타임에 class / module 동적 수정

  15. Flask vs Pyramid vs Django

    - Flask : 간단한 구조 제공 + 외부 library 사용 필요

    - Pyramid : 상대적으로 무거움

    - Django : 구현 위한 기본 틀을 제공해줌 + ORM(객체 관계 매핑)

  16. Django 아키텍쳐

    - MVT : Model + View + Template

  17. 파이썬 가상환경 구축 방법/ 라이브러리는?

* 아직 작성/수정 중 입니다. 질문들을 적다보니 중복되거나 답변이 빠져있습니다.