FUNDAMENTAL | 04-1. Python

yeonk·2021년 9월 11일
0

aiffel-ai-bootcamp

목록 보기
8/38
post-thumbnail

20210910



1. 함수

함수(function): 려진 시점에 특정한 작업을 수행하며, 입력값과 출력값(반환값)을 가질 수 있다.

변수: 값을 가리키는 이름.
여러가지 값으로 변할 수 있는 수

def: 함수를 정의 (define). 들여쓰기 사용

인자(argument): 함수를 호출할 때 전달하는 입력값

매개변수(parameter): 입력값으로 주어진 인자(argument)를 받는 변수

반환값(return value): 함수가 종료될 때 호출지점으로 전달할 출력값



스코프(scope)

특정 위치에서 어떤 변수에 접근할 수 있는지, 또 정의된 변수가 어디까지 유효한지 정의된 범위

global scope: 전역스코프. 함수 내부를 포함해 코드 어디서든 참조 가능

local scope: 지역 스코프. 함수 내부에서 정의되어 밖에서 참조 불가능



인자 전달, return

  • 매개변수를 정의하고 인자를 누락할 경우 오류 발생

  • 함수를 호출할 때는 미리 정의된 값을 입력해야 함

  • 함수가 받을 매개변수의 기본값을 지정해주면, 입력값이 없을 경우 해당 기본값을 사용

  • 입력값이 여러개 일 때, 각 입력값의 기본값을 지정할 수 있음
    (기본값이 있는 인자들이 기본값이 없는 필수 인자들의 뒤에 와야 함)

  • 함수가 실행된 후 그 값을 재사용 하기 위해서는 반환(return)을 명시적으로 표시해줘야 함






2. 제어문

코드 블럭의 흐름(실행 여부, 반복)을 제어



If

명제의 참, 거짓에 따라 코드 실행 여부 결정.
들여쓰기 후 코드 작성 필수.

else: if 조건 이외의 경우(명제가 거짓인 경우) 실행

elif: if 명제 이외의 경우에 또 다른 명제가 참일 경우에 실행



While

조건이 참인 동안 반복.
코드 블럭을 실행하기 전 가장 먼저 조건문을 검사해서, 조건문이 참이면 코드 블럭을 실행.
루프(loop, 고리).

무한 루프(infinite loop): 반복문이 끝없이 계속 실행되는 경우



For

for 뒤에는 a in A의 형태로, 목록A에서 값을 하나씩 꺼내서 a 변수에 담아 반복문을 실행

반복 가능한(iterable, 이터러블) 객체를 활용






3. 자료형

int, float

int: integer, 정수.

float: floating-point number, 실수(또는 부동소수점)

부동소수점(thms200.log)

고정소수점 vs 부동소수점



NoneType, boolean

NoneType:
유한한 하나의 값. (None, 0)
그 무엇도 반환하지 않았다는 것을 알려주기 위함.

bool:
True & False.
앞에 not을 붙이면 결과가 뒤집힘.



컨테이너 자료형 (Str, tuple, list, dict)

str:
string(문자열) / "",'' 사용
인덱스, 슬라이스 가능

tuple:
괄호() 안에 원하는 값들을 쉼표(,)로 구분.
인덱스, 슬라이스 가능.
값 변경 불가능.
튜플 안의 튜플 안의 값을 가져올 수 있음

nested_tuple = ((1, 2), (3, 4))
print(nested_tuple[1][0])

list:
대괄호([,]) 사용
값 변경 가능

# 리스트 뒤에 값 하나 추가
list.append()

# 특정 값 삭제
list.remove()

# 특정 순서의 값 삭제
list.pop()

dict:
중괄호({, })로 각 항목(item)을 나누고,(:)을 써서 키와 값을 나눔.
새로운 키를 넣어 값 추가 가능

# 키 추가
dictionary1['key1'] = 'value1'

# 키 제거
dictionary1.pop(key1)

# 키, 값 추출
dictionary.items()






4. 재귀함수(recursive function)

함수 내에서 그 함수 스스로를 사용하는 인셉션 같은 함수 종류



피보나치 수열

앞의 두 숫자를 더한 수가 다음 수가 되는 무한수열
(n번째 수는 n-1번째 수와 n-2번째 피보나치 수의 합)

# 재귀함수로 피보나치 수열 계산

def fibonacci(n):
    if n <= 2:
        number = 1
    else:
       number = fibonacci(n-1) + fibonacci(n-2)
    return number
    



위와 같이 실행할 경우 발생하는 문제

  • 최초의 n이 커질수록 속도는 기하급수적으로 느려지는 점

  • 한 번 불린 함수/입력값 조합이 반복적으로 불리기 때문에 이미 계산한 값을 다시 계산해야 한다는 비효율성



메모이제이션(memoization)

중간 계산값을 기억해놓고, 다시 계산하는 대신 값을 바로 읽어 쓰는 방식으로 계산 시간을 줄이는 기법

# 딕셔너리를 활용한 메모이제이션

memory = {1: 1, 2: 1}

def fibonacci(n):
    if n in memory:
        number = memory[n]
    else:
       number = fibonacci(n-1) + fibonacci(n-2)
       memory[n] = number
    return number

print(fibonacci(100))

print(memory)

0개의 댓글