티스토리 뷰

ETC

Python 개발자 면접 질문

비용러브 2022. 2. 10. 14:47

질문 #1. 파이썬의 주요 특징에 대해 이야기 해보세요.

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

 

 

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

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

확인코드:

l = [1, 2 ,3]
t = (1, 2, 3)
print(l[0], t[0])

l[0] = 10
print(l)
t[0] = 10
print(t)


>>> 1 1
>>> [10, 2, 3]
Traceback (most recent call last):
  File "test.py", line 10, in <module>
    t[0] = 10
TypeError: 'tuple' object does not support item assignment

 

 

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

예상 정답(한국어):

  • 자바스크립트나 C++과 달리 파이썬에는 삼향연산자가 없습니다. 하지만 파이썬에게는 비슷한 역할을 하는 다른 기능이 있습니다. 
    [Returning Value on True] if [Conditional Statement] else [Returning Value on False]

확인코드:

test_score = 100
passed = True if test_score == 100 else False

print(passed)

test_score = 50
passed = True if test_score == 100 else False

print(passed)


>>> True
>>> False

 

 

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

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

 

 

 

 

 

질문 #5. 변수나 함수 같은 식별자 길이의 제한이 있나요?

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

 

 

질문 #6. pass와  continue의 차이는 무엇인가요?

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

 

 

질문 #7. 파이썬에게 어떤 약점이 있나요?

  • 파이썬은 인터프리터 언어로 속도의 약점이 있습니다.
  • 파이썬은 많은 것을 할 수 있지만, 모바일 컴퓨팅에 약점이 있고 브라우저안에서 JavaScript 처럼 객체를 다룰 수 없습니다.
  • 동적타이핑 언어이기 때문에 덕타이핑(Duck-typing)을 사용합니다. 여기서 런타임 에러가 발생할 수 있습니다.

 

 

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

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

확인코드:

import os
print(os.getcwd())

>>> C:\Users\abc\PycharmProjects\abc

 

 

질문 #8. 파이썬 빌트인 함수에 대해 아는대로 말해보세요.

  • complex()
  • eval()
  • filter()
  • format()
  • hash()
  • hex()
  • len()
  • open()
  • min()
  • max()
  • abs()
  • sum()

    ...

확인코드:

print('complex() :', complex(10.5, 20))  # 복소수를 만들어 냅니다
eval("print('eval() :', 'abc')")  # string으로 된 파이썬 코드를 실행 시킵니다.
print("filter() :", list(filter(lambda x : x % 2 == 0, [1, 2, 0, 4])))  # 조건문에 부합하면 제외
print("format() : ", 'Hello {}'.format('딩그르르!'))  # {} 안에 문자열 삽입
print("hash() : ", hash('abc'))  # 해시 함수 안 객체를 해시 합니다.
print("hex() :", hex(14))  # 16진수로 변경
print("len() : ", len("ABC"))  # 문자열, 컨테이너 객체 길이(갯수)

txt = open('txt.txt')  # 파일을 엽니다.

l = [1, 34, 7, 4, 3, 5, 2]
print('min() : ', min(l))  # 최소값 찾기
print('max() : ', max(l))  # 최대값 찾기
print('abs() : ', abs(-13))  # 절대값 찾기
print('sum() : ', sum(l))   # 리스트 데이터 모두의 합


complex() : (10.5+20j)
eval() : abc
filter() : [2, 0, 4]
format() :  Hello 딩그르르!
hash() :  -3303280273215439683
hex() : 0xe
len() :  3
min() :  1
max() :  34
abs() :  13
sum() :  56

 

 

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

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

확인코드:

l = [ 12, 343, 65, 87, 123, 1, 1, 12, 87]
print(l)
print(set(l))


>>> [12, 343, 65, 87, 123, 1, 1, 12, 87]
>>> {65, 1, 12, 87, 123, 343}

 

 

 

 

 

질문 #10. 오퍼레이터중 //, % , ** 에 대해 설명하세요.

  • // 는 나눗셈 후 내림한 정수를 반환합니다.
  • %는 나눗셈 후 나머지를 반환합니다.
  • **는 제곱값을 반환합니다. 2**3은 2의 3승(세제곱) 입니다.

확인코드:

print(11//2)
print(11%2)
print(2**4)


>>> 5
>>> 1
>>> 16

 

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

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

 

 

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

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

 

 

질문#13. 파이썬은 객체지향 입니까? 왜 그렇습니까?

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

 

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

  • 캡슐화(Encapsulation)
  • 추상화(Abstraction)
  • 상속(Inheritance)
  • 다형성(Polymorphism)
  • 데이터 숨기기(Data Hiding)

 

데이터 숨기기와 관련된 추가 질문이 있을 수 있습니다.

데이터 숨기기는 클래스 구현의 자세한 사항을 숨기여 합니다. 클래스를 사용함에 있어 명확한 표준 인터페이스 제공을 위함입니다.

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

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

 

 

질문 #14. try... except... else 구문에서 else는 언제 실행되나요?

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

 

 

질문 #15. list append 와 list extend 의 차이점을 설명하세요.

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

예제코드:

list1,list2=[1,2,3],[5,6,7,8]
list1.append(list2)
print(list1)

list1,list2=[1,2,3],[5,6,7,8]
list1.extend(list2)
print(list1)


>>> [1, 2, 3, [5, 6, 7, 8] ]
>>> [1, 2, 3, 5, 6, 7, 8]

 

 

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

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

  • 읽기 전용 – 'r'
  • 쓰기 전용 – 'w'
  • 읽기-쓰기 – 'rw'
  • 덧붙이기 – 'a'

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

 

 

질문 #17. Python 에서 map() 함수는 어떤 역할을 하나요?

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

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

예제 코드:

map_ = map(lambda x:x*2, (1,2,4))
for i in map_:
    print(i)

print(list(map(lambda x:x*2, (1,2,4))))


>>> 2
>>> 4
>>> 8
>>> [2, 4, 8]

 

 

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

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

예제 코드:

try:
    raise KeyboardInterrupt
finally:
    print('Goodbye, world!')


>>> Goodbye, world!
Traceback (most recent call last):
  File "python.py", line 5, in <module>
    raise KeyboardInterrupt
KeyboardInterrupt

 

 

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

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

 

 

 

 

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

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

 

댓글