Collection의 종류


Collection은 python에 내장된 일반 자료형의(dict, list, set, tuple) 컨테이너 타입을 조금 더 발전시킨 형태의 구현체이다.

Collection 종류

Decorator란?


대상 함수를 wrapping 하고, wrapping 된 함수의 앞뒤에 추가적으로 꾸며질 구문들을 정의하여 함수의 내부를 수정하지 않고 기능에 변화를 주고싶을때 사용한다. 반복되는 구문을 decorator 함수를 재사용 함으로써 가독성과 직관성을 올릴 수 있다.

리스트와 튜플의 차이점


리스트는 가변적이며 튜플은 불변적이다. 그렇기 때문에 튜플은 append() 메소드와 같이 데이터를 수정하는 메소드를 사용할 수 없다. 리스트는 주로 요소의 수가 명확하지 않은 경우에 사용하며, 튜플은 요소의 수를 정확히 알고 있을때 사용한다.

파이썬의 함수 파라미터 종류


https://wikidocs.net/16053

1. default value(기본값)

인자를 입력하면 입력한 값으로 변경이 되어 전달되며,

입력하지 않을경우 처음 설정한 value값이 전달된다.

def fun(a, b = value): ... fun('a',[인자])

def fun(a, b = value):
	...
fun('a',[인자])

2. positional argument(위치 인자)

함수에서 정의한 위치대로 인자를 전달한다.

def fun(a, b): ... fun('a','b')

def fun(a, b):
	...
fun('a','b')

3. keyword argument(키워드 인자)

함수를 정의할때 파라미터의 순서와 상관없이 키워드 인자를 사용해 값을 전달할 수 있다.

def fun(a, b): ... fun(b = 'b', a = 'a')

def fun(a, b):
	...
fun(b = 'b', a = 'a')

4. 위치 인자 언패킹

리스트나 튜플과 같이 원소가 존재하는 객체를 *을 붙여 인자로서 함수에 입력하면 함수의 정의된 위치에 맞게 전달된다.

def fun(a, b, c): ... p = [5, 7, 9] fun(*p) fun(*(5, 7, 9))

def fun(a, b, c):
	...
p = [5, 7, 9]
fun(*p)
fun(*(5, 7, 9))

5. 키워드 인자 언패킹

키와 값이 있는 dict타입의 변수에 **을 붙여 인자로서 함수에 입력하면 함수의 정의된 위치에 맞게 전달된다.

def fun(a, b, c): ... p = {'a' : 'A', 'b' : 'B', 'c' : 'C'} fun(**p) fun(**{'a' : 'A', 'b' : 'B', 'c' : 'C'})

def fun(a, b, c):
	...
p = {'a' : 'A', 'b' : 'B', 'c' : 'C'}
fun(**p)
fun(**{'a' : 'A', 'b' : 'B', 'c' : 'C'})

클래스 메소드란?


클래스 메소드는 클래스에서 호출되고 인스턴스 메소드가 첫번째 파라미터로 자신의 인스턴스를 self로 전달하는 것과 달리 자신의 클래스를 파라미터로 전달한다. 인스턴스 메소드에서는 인스턴스에 국한하여 데이터를 사용하지만 클래스 메소드는 인스턴스가 공유하는 클래스 데이터를 사용할 수 있다.

class Language: default_language = "English" def __init__(self): self.show = '나의 언어는' + self.default_language @classmethod def class_my_language(cls): return cls() @staticmethod def static_my_language(): return Language() def print_language(self): print(self.show) class KoreanLanguage(Language): default_language = "한국어" >>> from language import * >>> a = KoreanLanguage.static_my_language() >>> b = KoreanLanguage.class_my_language() >>> a.print_language() 나의 언어는English >>> b.print_language() 나의 언어는한국어

class Language:
    default_language = "English"

    def __init__(self):
        self.show = '나의 언어는' + self.default_language

    @classmethod
    def class_my_language(cls):
        return cls()

    @staticmethod
    def static_my_language():
        return Language()

    def print_language(self):
        print(self.show)


class KoreanLanguage(Language):
    default_language = "한국어"


>>> from language import *
>>> a = KoreanLanguage.static_my_language()
>>> b = KoreanLanguage.class_my_language()
>>> a.print_language()
나의 언어는English
>>> b.print_language()
나의 언어는한국어

 

Docstring란?


Docstring은 코드의 문서화에 도움이 되는 문자열이다. """ 주석 내용 """ 을 사용하여 작성하며 모듈 파일 처음이나 함수, 클래스 선언 다음라인에 주로 작성한다.

def docs(0): """ 주석내용 """ >> docs.__doc__ >> '주석내용'

def docs(0):
	"""
	주석내용
	"""

>> docs.__doc__
>> '주석내용'

Callable 객체란?


함수처럼 호출될 수 있는 객체이며, callable() 함수를 사용해서 객체가 callable 객체인지 확인할 수 있다.

class Accumulator(object): def __init__(self, n): self.n = n def __call__(self, x): self.n += x return self.n from_1 = Accumulator(1) from_10 = Accumulator(10) print(from_1(10)) print(from_10(200)) callable(from_1) >> 11 >> 210 >> True

class Accumulator(object):
    def __init__(self, n):
        self.n = n
    def __call__(self, x):
        self.n += x
        return self.n

from_1 = Accumulator(1)
from_10 = Accumulator(10)

print(from_1(10))
print(from_10(200))
callable(from_1)
>> 11
>> 210
>> True

GIL이란?


Global Interpreter Lock의 약자로 파이썬 인터프리터가 한 쓰레드만 하나의 바이트코드만 실행할 수 있게 하는것이다.

한 쓰레드가 자원을 점유하면 다른 쓰레드는 대기하고 자원 점유를 멈추면 또다른 쓰레드가 자원을 점유하게 되는데, 이때 각 쓰레드가 원하는 시점에서 GIL을 획득하지 못해 실행이 지연될 수 있다.

https://dgkim5360.tistory.com/entry/understanding-the-global-interpreter-lock-of-cpython

 

패키지 관리자란?


패키지 소프트웨어를 설치, 관리하는 시스템으로 대표적인 파이썬 패키지 관리자로는 pip이 있다.

가상 환경이란?


파이썬에서는 한 라이브러리에 하나의 버전만 설치가 가능하며 여러 프로젝트를 진행할때 다른 버전의 라이브러리를 사용한다면 문제가 되기때문에 프로젝트 마다 독립적인 가상환경을 만들어 패키지를 관리한다.

 

This wiki is built in Notion. Here are all the tips you need to contribute.

PEP-8 스타일 가이드란?


Python Enhancement Proposal의 약자로 특정 규칙을 따르며 다른 사람과 원활한 협업을 도와주고 가독성을 높여준다.

whitespace

  • 탭이 아닌 스페이스로 들여쓴다
  • 문법적으로 의미있는 들여쓰기(indenting)는 스페이스 네 개를 사용한다.
  • 한 줄의 문자 길이가 79자 이하여야 한다.
  • 한 파일에서 함수와 클래스는 빈 줄 두개로 구분해야 한다.
  • 클래스에서 메서드는 빈 줄 하나로 구분해야 한다.
  • 리스트 인덱스, 함수 호출, 키워드 인수 할당에는 스페이스를 사용하지 않는다.
  • 변수 할당 앞뒤에 스페이스를 하나만 사용한다.

Naming

  • Functions(함수), Variables(변수), Attributes(속성)은 lowercase_underscore 형식을 따른다.
  • Protected instance attributes는 _leading_underscore 형식을 따른다.
  • Private instance attributes는 __double_leading_underscore 형식을 따른다.
  • Class, Except는 CapitalizedWord 형식을 따른다.
  • 모듈에서의 상수는 ALL_CAPS 형식을 따른다.
  • 클래스의 메소드(함수)는 첫 번째 파라미터의 이름을 self로 지정한다.
  • 클래스 메소드에서는 첫 번째 파라미터의 이름을 cls로 지정한다.

Expressions and Statements

  • if len(somelist) == 0으로 빈 값([] or ' ')을 확인하지 않고, if not some somelist를 사용하여 빈 값은 False가 된다고 가정한다.
  • 반대로, 값이 있는경우([1] or 'hi') if somelist가 True가 된다.
  • 한 줄로 된 if문, for와 while 루프, except 복합문을 쓰지 않고, 여러 줄로 나눠서 명료하게 작성한다.
  • 항상 파일의 맨 위에 import 문을 놓는다.
  • import는 '표준 라이브러리 모듈, Third-Party 모듈, 자신이 만든 모듈' 순으로 구분해야 한다.

매직 메소드란?


클래스 안에 정의된 함수중 함수가 __로 시작해서 __로 끝나는 메소드를 매직 메소드 라고 부른다. 대표적인 매직 메소드로는 init, __call__등 이 있다.

이터레이터의 생성 방법


이터레이터는 반복가능한 객체(list, dict, set, ...)을 인자로 전달받아 사용하며 객체의 인덱스 위치를 저장하고 있다.

a = [1, 2, 3] a_iter = iter(a) a2_iter = a.__iter__()

a = [1, 2, 3]
a_iter = iter(a)
a2_iter = a.__iter__()

제네레이터와 코루틴이란?


제네레이터

return 키워드 대신 yield키워드를 사용하는 함수다. 배열이나 리스트와 같이 반복가능한 값들을 생성해내며 값을 반환할때 모든값을 반환하는 것이 아닌 한 개의 값을 반환한다.

def num_gen(): for i in range(3): yield i g = num_gen() # 제너레이터 객체 생성 num1 = next(g) num2 = next(g) num3 = next(g) print(num1, num2, num3)

def num_gen():
    for i in range(3):
        yield i


g = num_gen()       # 제너레이터 객체 생성 

num1 = next(g)
num2 = next(g)
num3 = next(g)

print(num1, num2, num3)

코루틴

제네레이터는 yield를 사용해서 값을 발생시키지만 코루틴은 제네레이터의 무한루프문 안에서 값을 전달받아 사용된다.

while True: # 코루틴을 계속 유지하기 위해 무한 루프 사용 x = (yield) # 코루틴 바깥에서 값을 받아옴, yield를 괄호로 묶어야 함 print(x) co = number_coroutine() next(co) # 코루틴 안의 yield까지 코드 실행(최초 실행) co.send(1) # 코루틴에 숫자 1을 보냄 co.send(2) # 코루틴에 숫자 2을 보냄 co.send(3) # 코루틴에 숫자 3을 보냄

while True:        # 코루틴을 계속 유지하기 위해 무한 루프 사용
        x = (yield)    # 코루틴 바깥에서 값을 받아옴, yield를 괄호로 묶어야 함
        print(x)
 
co = number_coroutine()
next(co)      # 코루틴 안의 yield까지 코드 실행(최초 실행)
 
co.send(1)    # 코루틴에 숫자 1을 보냄
co.send(2)    # 코루틴에 숫자 2을 보냄
co.send(3)    # 코루틴에 숫자 3을 보냄

 

파이썬에서의 메모리 추가/삭제 방법


파이썬은 가비지 컬렉션(Garbage Collection)이 메모리를 관리 해주기 때문에 사용자가 따로 관리할 필요가 없다. 가비지 컬렉션은 객체를 참조하는 다른 객체 또는 위치가 늘어날수록 해당 객체의 reference count는 증감하게 되고, reference count가 0이 되면 객체는 메모리에서 해제하는 식으로 메모리를 관리한다.

':: IT > 기술면접' 카테고리의 다른 글

웹개발2  (0) 2020.08.10
웹개발  (0) 2020.08.10
[기술면접] 데브옵스  (0) 2020.07.31
[기술면접] 운영체제  (0) 2020.07.31
[기술면접] 네트워크  (0) 2020.07.30

+ Recent posts