티스토리 뷰
python 기술면접에 대비해서 자주 나오는 질문과 답을 정리하려고 합니다.
질문의 출처는 여기이며, 이 글의 내용을 공부하면서 번역했습니다.
번역하면서 추가로 설명을 넣거나 표현을 변경하였는데 잘못된 점 있다면 말씀 부탁드리겠습니다.
6. 버그를 찾거나 정적 분석을 할수 있는 어플리케이션이 있나요?
:pychecker, 정적 분석에 사용.
pylint, 파이썬 모듈들이 표준 코딩을 만족하는지 체크.
7. decorator는 언제 사용되나요?
: 함수를 빠르게 변경할 때 사용 가능합니다.
8.리스트와 튜플의 주된 차이점은 무엇인가요?
: 리스트는 mutable하고 튜플은 immutable 합니다.
9. 파이썬에서 메모리는 어떻게 관리되나요?
: 파이썬에서는 개별적인 힙을 사용해서 메모리를 유지합니다. 따라서 힙은 모든 파이썬 객체와 자료구조를 가지고 있습니다.
이 영역은 파이썬 인터프리터만이 접근 가능하며 프로그래머는 사용할 수 없습니다.
또한 파이썬은 빌트인된 가비지 컬렉터를 통해서 비사용되는 메모리에 대해서 힙공간을 관리합니다.
10. Lambda와 Def의 주된 차이점은 무엇인가요?
: Def는 다중 표현을 갖습니다. 반면에 lambda는 단일 함수입니다.
Def는 함수를 생성하고 이름을 지정하여 나중에 다시 호출합니다. Lambda는 함수 객체를 구성하고 반환합니다.
Def는 선언을 반환할수 있지만, Lambda는 할수 없습니다.
21. Docstring은 무엇인가요?
: Docstring은 파이썬의 모듈, 함수, 클래스, 매소드의 정의에 처음 부부에 선언되는 유니크한 텍스트입니다.
25. Function call 혹은 A callable Object는 무엇인가요?
: 파이썬에서 함수는 호출가능한 객체로 취급됩니다.
27. Call by value는 무엇인가요?
: 표현식 또는 값이 함수의 각 변수에 바인딩되는지 여부에 대한 인수입니다.
파이썬은 그 변수를 함수 수준 범위에서 로컬로 취급합니다. 해당 변수에 대한 모든 변경사항은 로컬로 유지되며 함수외부에 반영되지 않습니다.
28. 파이썬에서 call by reference는 무엇인가요?(??)
: call by reference 와 pass by reference는 서로 바꿔 사용할수 있습니다. 참조로 인수를 전달하면 간단한 복사가 아닌 함수에 대한 암시적 참조로 사용할 수 있습니다. 이 경우 인수에 대한 모든 수정 사항도 호출자에게 표시됩니다.
33. *Args는 무엇을 하는 기능인가요?
: 이것은 N개의 매개변수를 넘기겠다는 표시입니다,
# Python code to demonstrate
# *args for dynamic arguments
def fn(*argList):
for argx in argList:
print (argx)
fn('I', 'am', 'Learning', 'Python')
34. *Kwargs는 무엇을 하나요?
: N개의 변수의 파라미터를 넘기겠다는 것인데 이때 이름 혹은 키워드를 가지고 있습니다.
# Python code to demonstrate
# **kwargs for dynamic + named arguments
def fn(**kwargs):
for emp, age in kwargs.items():
print ("%s's age is %s." %(emp, age))
fn(John=25, Kalley=22, Tom=32)
35. 파이썬에서 Main() 메소드가 있나요?
: 파이썬은 인터프리터 언어이기 때문에 일반적으로는 code by code로 실행됩니다.
현재 모듈 이름을 확인하는 방식으로 main함수를 사용할수 있습니다.
print("Welcome")
print("__name__ contains: ", __name__)
def main():
print("Testing the main function")
if __name__ == '__main__':
main()
51. GIL이란 무엇인가요?
: 글로벌 인터프리터 락으로 파이썬 객체가 다중 스레드가 동시에 실행되지 않도록 하는 것입니다.
52. 파이썬에서 쓰레드의 안정성은?
: 파이썬에서는 쓰레드에 대해 안정성있는 접근을 보장합니다. 이를 위해서 GIL(global interpreter lock)을 사용합니다.
만약 쓰레드가 GIL lock을 잃었을 경우에 쓰레드로부터 코드를 안정성있게 만들어야 합니다.
53. 파이썬에서는 어떻게 메모리를 관리하나요?
: 파이썬에서는 내부적으로 힙 매니저가 구현되어 있습니다. 힙 매니저는 모든 오브젝트와 자료구조를 가지고 있습니다.
또한, 힙매니저는 오브젝트에 대한 힙 스페이스의 할당과 할당 해제를 합니다.
54. 파이썬에서 튜플은 무엇인가요?
: 튜플은 collection데이터 타입의 하나로 immutable한 자료형입니다. 리스트와 비슷한 구조를 갖지만 수정이 가능하냐 안하냐는 차이가 있습니다.
55. 파이썬에서 딕셔너리는 무엇인가요?
: 딕셔너리는 collection데이터 타입의 하나로서 key와 value의 구조로 이뤄진 데이터 타입입니다. 해쉬, 맵 혹은 해쉬맵이라고도 불립니다.
56. 파이썬에서 Set은 무엇인가요?
: Set은 순서가 없는 (unordered)한 collection 데이터 객체의 하나로 유니크한 원소들만들 갖습니다.
57. 파이썬의 딕셔너리는 어떻게 사용되나요?
: 딕셔너리 타입은 하나의 그룹(key)과 다른 그룹(value)을 매핑하기 위해서 사용될수 있습니다.
58. 파이썬의 리스트는 연결리스트(linked list)인가요?
: 파이썬의 리스트는 가변길이 배열로 C스타일의 연결리스트와는 다릅니다.
내부적으로 다른 객체를 참조하기 위한 연속적인 배열을 가지며, 배열 변수에 대한 포인터와 그 길이를 목록 헤드 구조에 저장합니다.
59. 파이썬에서 클래스는 무엇인가요?
: 파이썬은 객체지향 프로그래밍을 지원하며 거의 모든 OOP특징을 사용할수 있도록 제공합니다.
파이썬의 클래스는 객체를 만들기 위한 청사진입니다. 이것은 멤버 변수를 정의하고 그 변수들 사이의 행동을 가집니다.
>>>class Human: # Create the class
... pass
>>>man = Human() # Create the instance
>>>print(man)
<__main__.Human object at 0x0000000003559E10>
60. 파이썬의 클래스에서 Attributes와 Methods는 무엇인가요?
: 기능을 정의하지 않은 클래스는 쓸모가 없습니다. 속성을 추가하므로 이 문제를 해결할 수 있는데, 속성은 데이터와 기능을 위한 컨테이너 역할을 합니다. 또한, Attribute를 직접 class 내부에 추가할수도 있습니다.
>>> class Human:
... profession = "programmer" # specify the attribute 'profession' of the class
>>> man = Human()
>>> print(man.profession)
programmer
Attributes를 추가한 후에 기능을 정의 합니다. 일반적으로 이 기능을 Methods라고 부릅니다.
>>> class Human:
profession = "programmer"
def set_profession(self, new_profession):
self.profession = new_profession
>>> man = Human()
>>> man.set_profession("Manager")
>>> print(man.profession)
Manager
61. 런타임에 클래스 속성에 값을 할당하는 방법은 무엇인가요?
: 클래스에 init 메소드를 추가하고 최초에 변수를 입력해줍니다.
>>> class Human:
def __init__(self, profession):
self.profession = profession
def set_profession(self, new_profession):
self.profession = new_profession
>>> man = Human("Manager")
>>> print(man.profession)
Manager
62. 파이썬에서 상속은 무엇인가요?
: 상속이란 OOP에서 객체가 부모 클래스의 특징에 접근할 수 있는 것을 말합니다.
class PC: # Base class
processor = "Xeon" # Common attribute
def set_processor(self, new_processor):
processor = new_processor
class Desktop(PC): # Derived class
os = "Mac OS High Sierra" # Personalized attribute
ram = "32 GB"
class Laptop(PC): # Derived class
os = "Windows 10 Pro 64" # Personalized attribute
ram = "16 GB"
desk = Desktop()
print(desk.processor, desk.os, desk.ram)
lap = Laptop()
print(lap.processor, lap.os, lap.ram)
63. 파이썬에서 Composition은 무엇인가요?
: composition은 파이썬에서 상속의 한 종류입니다.
기본 클래스에서 상속을 하지만 파생 클래스의 멤버 역할을 하는 기본 클래스의 인스턴스 변수를 사용합니다.
class PC: # Base class
processor = "Xeon" # Common attribute
def __init__(self, processor, ram):
self.processor = processor
self.ram = ram
def set_processor(self, new_processor):
processor = new_processor
def get_PC(self):
return "%s cpu & %s ram" % (self.processor, self.ram)
class Tablet():
make = "Intel"
def __init__(self, processor, ram, make):
self.PC = PC(processor, ram) # Composition
self.make = make
def get_Tablet(self):
return "Tablet with %s CPU & %s ram by %s" % (self.PC.processor, self.PC.ram, self.make)
if __name__ == "__main__":
tab = Tablet("i7", "16 GB", "Intel")
print(tab.get_Tablet())
64. 파이썬에서 Erros와 Exceptions는 무엇인가요?
: Erros는 코딩 이슈로서 프로그램이 비정상적으로 종료되게 됩니다.
Exceptions는 외부적인 이벤트로 인해 발생하는 것으로 인터럽트 같은 경우가 있습니다.
65. Try / Exception / Finally는 어떻게 사용하나요?
try:
print("Executing code in the try block")
print(exception)
except:
print("Entering in the except block")
finally:
print("Reached to the final block")
66. 파이썬에서 미리 정의된 조건에 대한 Exceptions를 어떻게 발생 시키나요?
# Example - Raise an exception
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
67. 파이썬의 Iterators는 무엇인가요?
: Iterators는 배열과 같은 객체로서 다음 구성 성분으로 이동하는 것이 가능합니다.
next() 메소드로 데이터를 순차적으로 호출 가능합니다.
68. iterators와 itrable의 차이는 무엇인가요?
: 리스트, 튜플, 딕셔너리 및 세트와 같은 컬렉션 유형은 모두 반복 가능한 객체 인 반면 순회하는 동안 반복자를 반환하는 반복 가능한 컨테이너이기도합니다.
iterable은 하나씩 차례로 반환 가능한 객체입니다. __iter__, __getiterm__메소드로 정의된 class들이 iterable하다고 할수 있습니다.
iterable을 iterator로 변환하고 싶다면, iter()라는 빌트인 함수를 사용하면 변환 가능 합니다.
69. 파이썬의 generator는 무엇인가요?
: generators는 iterator를 생성하는 함수입니다. yield 키워드를 사용하여 반환합니다.
yeild는 return과 달리 반환 후에 종료되지 않고 그 상태를 유지합니다.
generator를 사용할 경우의 이점으로는 memory를 효율적으로 사용할 수 있다는 것입니다.
# Simple Python function
def fn():
return "Simple Python function."
# Python Generator function
def generate():
yield "Python Generator function."
print(next(generate()))
list compression을 통한 방법과 generator의 방법을 비교해보면 LC는 리스트를 모두 메모리에 올리기 때문에 그 크기만큼 메모리를 차지하는 사이즈가 커집니다. 하지만 generator는 next()메소드로 차례로 값에 접근하여 메모리에 올리게 됩니다.
70. 파이썬에서 Closures는 무엇인가요?
: Closures는 함수 객체로서 다른 함수를 반환합니다. 더 구체적으로는 파이썬의 내부함수의 예시가 있습니다.
Clossure는 일반 함수와 다르게 자신의 영역밖에서 호출된 함수의 변수값과 레퍼런스를 복사, 저장, 접근을 가능하게 합니다.
def multiply_number(num):
def product(number):
'product() here is a closure'
return num * number
return product
num_2 = multiply_number(2)
print(num_2(11))
print(num_2(24))
num_6 = multiply_number(6)
print(num_6(1))
71. 파이썬에서 Decorators는 무엇인가요?
: 함수 객체에 새로운 기능을 추가하는 것을 쉽게 할수 있는 방법입니다.
def decorator_sample(func):
def decorator_hook(*args, **kwargs):
print("Before the function call")
result = func(*args, **kwargs)
print("After the function call")
return result
return decorator_hook
@decorator_sample
def product(x, y):
"Function to multiply two numbers."
return x * y
print(product(3, 3))
82. 파이썬의 Enumerate는 무엇인가요?
: iterators와 함께 사용 가능한 것으로 iterations의 횟수를 셀수 있습니다.
83 파이썬의 Globals() 함수는 무엇인가요?
: global로 정의된 변수들을 딕셔너리 테이블처럼 반환할수 있습니다.
# Example: globals() function
x = 9
def fn():
y = 3
z = y + x
# Calling the globals() method
z = globals()['x'] = z
return z
# Test Code
ret = fn()
print(ret)
87. "Self"는 어떤 키워드 인가요?
: self는 객체 인스턴스가 가지고 있는 변수들을 나타냅니다.
88. 파이썬 프로그램에서 어떻게 코드를 디버깅 하나요?
: python debugger(pdb)를 사용하면 됩니다.
'개발 일반' 카테고리의 다른 글
Spark 기술 면접 대비 (0) | 2019.10.07 |
---|---|
Java 기술 면접 대비 (0) | 2019.10.03 |
[세팅] pycharm 메모리 설정 하기 (0) | 2019.02.11 |
vi 명령어 간단 정리 (0) | 2018.10.29 |
리눅스 심볼릭 링크 걸기 (0) | 2018.10.16 |