now is better than never

[인공지능(AI) 기초 다지기] 1. 파이썬 기초 (2) 본문

Python/[코칭스터디 9기] 인공지능 AI 기초 다지기

[인공지능(AI) 기초 다지기] 1. 파이썬 기초 (2)

김초송 2023. 1. 13. 16:52

2. 파이썬 기본 문법

 - Function (함수)

  • 어떤 일을 수행하는 코드의 덩어리
  • 캡슐화: 인터페이스만 알면 타인의 코드 사용
  • 함수 이름, parameter, indentation(들여쓰기), return value(optional)
  • parameter: 함수의 입력 값 인터페이스
  • argument: 실제 parameter에 대입된 값
def function (parameter #1, ...):
	수행문 #1 (statements)
    수행문 #2 (statements)
    return <반환값>
  • 함수와 함수 사이는 두 줄씩 띄움
  •  
  parameter O parameter X
return X 함수 내 수행문만 수행 parameter를 받아 수행문 수행 
ex) list.sort()
return O parameter 없이 수행문 수행 후 결과값 반환
ex) sort(list)
parameter를 사용하여 수행문 수행 후 결과값 반환

 

- Console I/O

  • input() : 콘솔창에서 문자열을 입력 받는 함수
  • print() : 화면에 출력, 타입이 다른 값들을 연결시켜 출력할 때 콤마(,)로 연결
  • print formatting
    1. % string (old school formatting)
      "%datatype" % (variable)
      print( '%s %s'  % ('one', 'two') )    -> s = string
      print( '%d %d'  % (1, 2) )    -> d = digit (십진수)
      {.2f}. = float 2자리
    2. str.format (old school formatting)
      "~{datatype}~".format(argument)
      print( '{} {}'.format('one', 'two') )
      print( '{} {}'.format(1, 2) )
    3. f-string (python 3.6 이후)
      print(f"{변수명1} {변수명2}")
      print(f"{변수명:*<20})   -> 왼쪽 정렬 20글자 나머지 *로 패딩

 

 

- Condition (조건문)

if <조건>:
	<수행문 1> # 조건 충족
else:
	<수행문 2> # 조건 불충족
  • == : 값이 같으면
  • is : 메모리 주소가 같으면
  • if 1 == True / if 0 == False
  • 값이 여러 개면 and = all / or = any

 

- Loop (반복문)

for 변수 in 반복 범위:
	<실행문>
  • range(시작, 끝, 간격) : 시작과 끝(숫자 바로 앞까지)을 지정해서 그 수만큼 반복문 실행하게 해줌
  • 0부터 시작
  • 시퀀스형 자료형 : 문자열, 리스트 등 순서대로 하나씩 값을 갖고올 수 있는 자료형
# 조건이 만족하는 동안 반복 명령문 수행
# 반복 실행횟수가 명확하지 않을 때
i = 1
while <조건>:
	<수행문>
    i += 1
  • 반복의 제어
    • break : 특정 조건에서 반복 종료
    • continue : 특정 조건에서 남은 반복 명령 스킵
    • else : 반복 조건이 만족하지 않을 경우 1회 수행 후 종료
  • Variable Nested Loops (가변적인 중첩 반복문)
    • loop 안에 input을 받아서 사용자의 입력에 따라 가변적으로 반복됨
    • while True는 권장하지 않음 (무한 루프에 빠질 가능성 높음)

 

* unpacking: 리스트의 값들을 개별적인 변수에 할당하는 것

 

- Debugging (디버깅)

  • 문법적 에러를 찾기 위한 에러 메세지 분석 -> 대부분 인터프리터가 알려줌 (들여쓰기, 오탈자, 대소문자 등)
  • 논리적 에러를 찾기 위한 테스트 -> def main() + __name__ : 파이썬을 실행하면서 true, false 코드 실행

 

 

- String (문자열)

  • 시퀀스 자료형
    1. Indexing (인덱싱)
      • 문자열의 각 문자는 개별 주소(offset)를 가짐
      • 이 주소로 할당된 값을 가져오는 것이 인덱싱
    2. Slicing (슬라이싱)
      • 문자열의 주소값을 기반으로 부분값을 반환
      • [:]로 복사 가능
      • [ start : end : step ]
  • 컴퓨터는 문자를 2진수 숫자로 변형해서 처리
  • 문자열 선언은 ' 나 " 사용
    • '를 표현하고 싶을 때는 앞에 \ 추가
    • 줄 바꾸기 : """ (큰 따옴표 3개) 혹은 \n 
  •  raw string : r"string" -> escape 문자 무시, 역슬래시 그대로 출력

 

- Function (함수)

  • 함수에서 parameter를 전달하는 방식
    1. Call by Value (값에 의한 호출)
      인자에 값만 넘김
      함수 내 인자 값 변경 시, 호출자에 영향 X
    2. Call by Reference (참조에 의한 호출)
      인자에 메모리 주소를 넘김
      함수 내 인자 값 변경 시, 호출자 값 변경됨
    3. Call by Object Reference (객체 참조에 의한 호출)
      객체의 주소가 함수로 전달됨 (리스트 전체)
      전달된 객체를 참조하여 변경 시 호출자에 영향 O
      새로운 객체를 만들 경우 호출자에게 영향 X

 

  • Swap :  함수를 통해 변수 간의 값을 교환하는 함수
    • swap_offset : 리스트의 전역 변수 값을 직접 변경
    • swap_reference : 리스트 객체의 주소값을 받아 값을 변경
def swap_value(x, y):
    temp = x
    x = y
    y = temp

a = [#어떤 값]

def swap_offset(offset_x, offset_y):
    temp = a[offset_x]
    a[offset_x] = a[offset_y]
    a[offset_y] = temp

# 실제 swap이 일어나는 함수
def swap_reference(list, offset_x, offset_y):
    # temp_list = list[:] # 들어온 리스트를 직접 안 만지고 복사하는 것이 제일 좋음
    temp = list[offset_x]
    list[offset_x] = list[offset_y]
    list[offset_y] = temp

 

  • Scoping Rule (변수의 범위)
    • 지역변수 (local variable) : 함수 내에서만 사용
    • 전역변수 (global variable) : 프로그램 전체에서 사용
      함수 안에서 사용하고 싶으면 변수 앞에 global 선언
def f():
    s = "I love London!" # local variable
    print(s)
    
s = "I love Paris!" # global variable
f() # I love London!
print(s) # I love Paris!

 

  • Recursive Function (재귀함수)
    자기자신을 호출하는 함수
    점화식과 같은 재귀적 수학 모형을 표현할 때 사용
    재귀 종료 조건 존재, 종료 조건까지 함수호출 반복
def factorial(n):
    if n==1:
        return 1
    else:
    	return n * factorial(n-1)

 

- Function Type Hint

  • Dynamic Typing - 파이썬의 가장 큰 특징 -> 처음 함수를 사용하는 사용자가 interface를 알기 어려움
  • 사용자에게 인터페이스를 확실하게 알려줌
  • parameter의 타입과 return 타입을 명시 -> 문서화 시 정보를 명확히 알 수 있음
def do_function(var_name : var_type) -> return type:
	pass
  • 인터프리터 등을 통해 코드의 발생 가능한 오류를 사전에 확인
  • 시스템 안정성 확보

 

- Docstring

  • 파이썬 함수에 대한 상세스펙을 사전에 작성
  • 함수명 아래에 세 개의 따옴표로 영역 표시 
  • 목적, 파라미터, 리턴, 용례

 

- 함수 작성 가이드 라인

  • 가능한 한 짧게 작성 (+여러 개)
  • 함수 이름에 함수의 의도를 명확히 할 것 ( Verb_Object 형태)
  • 인자로 받은 값 자체를 바꾸지 말 것 (복사 형태로 임시변수 선언)
  • 공통적으로 사용되는 코드, 복잡한 수식, 복잡한 조건을 함수화
  • 코드는 하나의 보고서 -> 다른 사람이 이해할 수 있게 짤 것 (파이썬 코딩 컨벤션)