Daily Life of BlueRose

컴퓨터 & 코딩 공부/파이썬

파이썬 기초(1) - 공통문법, Comprehension, Packing, Decorator

푸른로즈 2024. 4. 19. 16:16
728x90

간략한 공통 문법

  1. Spyder IDE에서 일괄 들여쓰기 : Ctrl + ]
  2. 코딩 중 구획 나누기 : #%%
  3. 코딩 중 줄바꾸기 : \
  4. if문
    • if 조건문 : 실행할 코드
    • elif 조건문 : 실행할 코드-2
    • else : 실행할 코드-3
  5. 산술연산
    • 몫 : a // b
    • 나머지 : a % b
    • 제곱 : a * * b
  6. 논리 연산 : and / or / not을 사용가능하며, 한 줄에 연속사용시 not을 우선적으로 계산한 후, 앞에서부터 순차적으로 1:1로 and/or연산을 시행한다.
논리연산의 처리과정 예시
 
  1. 삼항 연산자 : C++의 '(a > b) ? a : b’에 대응하는 삼항 연산자는 ‘a if a>b else b’
  2. 반복문
    • continue : 반복문의 이번 회차 실행을 종결하고, 다음 순번으로 넘어간다.
    • break : 반복문 자체를 종결하고 다음 명령어로 넘어간다.

    • ‘for 개체 in 개체들:’
      • 개요 : VBA의 'for each 개체 in 개체들’에 해당. 단, '개체들’로 숫자를 사용시, 반드시 range(시작, 끝, 스텝)을 사용해야 함.
      • 응용 : ‘개체’/'개체들’를 쌍으로 맞추기만 한다면, 여러개의 매개변수를 사용할 수 있다. 예를들면, for A, B in AB.items() 혹은 for A, B in list(zip(As, Bs)) 등…
    • ‘while 조건문: / else’ : while에 해당되는 조건동안 무한반복하되, break에 걸리지 않고 끝나는 경우에는 else문을 실행한다.
    • 반복문 부속 명령
 

Comprehension(반복문 간소화)

  1. 개요 : 압축된 문법으로 반복문을 만드는 방법 증 하나이다
  2. 문법
    • 리스트(대괄호 사용) : [표현식 for 항목 in 순회 가능한 객체 if 조건]
    • 셋(중괄호 사용) : {표현식 for 항목 in 순회 가능한 객체 if 조건}
    • 딕셔너리(중갈호 사용) : {키 표현식 : 값 표현식 for 객체 in 순회 가능한 객체}
  3. 공통적용 추가내용 : 'for 항목 in 순회가능한 객체’부분을 여러개 사용하면, 다차원 for문으로 사용가능하다. 예를들면 구구단을 만들 때, for문 내에 for문을 만드는 대신, 아래와 같은 코드만으로 만으로 완성이 가능하다.
    • [str(i)+“×”+str(j)+"="+str(i*j) for i in range(1,10) for j in range(1,10)]

Packing / Unpacking

Packing : 리스트, 튜플 등 배열에 여러개의 값을 대입하는 것

  • 기본 : a = (1, 2, 3)
  • Zip()을 활용한 Packing의 특징
    • zip을 통해서 만들어지는 결과물은 튜플로 구성된다
    • zip()을 직접 변수에 할당하는 경우, 리스트나 튜플로 간주되지 않고 별도의 zip개체로 간주된다. 이에 따라 결과물 처리에 애로사항이 발생하므로, list(zip())의 형태로 사용해야 한다.
    • zip()의 결과물은 튜플로 구성되므로, 수정하기가 어렵다. 리스트 개체로 결과물을 받기 위하여, [d,e,f = list(i) for i in list(zip(a, b))]등의 형태로 사용하는 것이 좋다.
  • Packing의 예시

a = [1, 2, 3]
b = [‘st’, ‘nd’, ‘rd’]
ab = list(zip(a, b))
→ ab : [(1, ‘st’), (2, ‘nd’), (3, ‘rd’)]

 

Unpacking : 리스트, 튜플 내의 값을 하나 이상의 변수로 대입하는 것

  1. 리스트, 튜플의 Unpacking

a = [1, 2, 3]
b, c, d = a
→ b : 1, c : 2, d : 3

 

  1. List, dict 등 개체를 함수의 인수로 Unpacking하기
    • List : 함수(*리스트개체)
    • Dict : 함수(**딕셔너리개체)
    • 활용 예시

uDate = datetime.date(*[int(i) for i in (‘2020-07-16’).split(’-’)])
→ uDate : datetime.date(2020, 7, 17)
 ※ [int … 중략 … split(’-’)] 구간은 '리스트 컴프리헨션’이라는 축약 문법임

 

  1. Unpacking을 활용한 변수간 값 상호변경

a = 100
b = 200
a, b = b, a
→ a : 200, b : 100

 

Decorator

  1. 개요 : 공통 사용 기능을 미리 구현해두고, 신규 함수 정의시 이를 상속할 수 있게 만든 함수
  2. 데코레이터의 구조
def deco_it(func)
    def inner(*args, **kwargs)
        추가 구현할 기능 1				# 함수 작동시간 검출 등 기능추가
        추가 구현할 기능 2
        result = func(*args, **kwargs)		# 기존의 함수값은 그대로 반환
        return result
    return inner
  1. 데코레이터 사용 예시
      @deco_it
      def test(a, b):
          return a + b
      ⇒ a+b를 반환하되, deco_it에서 구현한 추가기능도 같이 실행한다.
  1. 활용방안 : 각 함수별 계산 시간 측정, 각 함수별 명칭ㆍ매개변수 파악 등을 위한 상위함수 작성. 즉, 특정함수에 기능을 추가하여 새로운 함수 구현
  2. 기타 : 상속을 받아 기능을 구현한다는 점에서 인터페이스와 비슷해보일 수 있으나, 인터페이스가 반드시 구현해야 할 최소기능을 정의한다면, 데코레이터는 상속된 내용에 추가적인 내용을 덧붙인다는데 의의가 있다.
반응형