함수 심화학습
함수
- 입력값을 받아서 출력값을 내어놓는 것
- 수학에서는 f(x) = y로 표현
- 프로그램에서의 함수는 입력 값이 있을 수도 있고 없을 수도 있음
- 입력값과 결과값이 꼭 '숫자'가 아닐 수도 있음(문자열, 리스트, 딕셔너리 등 어떤 자료형)
- 함수의 입력값이 또 다른 함수가 될 수 있음
- 출력값은 한개다.(여러 개일 경우, tuple형태로 변환)
- return이 있어야 반환값이 나온다.
def 함수이름(x1,x2,x3):
문장1
문장2
return y
def calculate_change(payment, cost):
money = payment - cost
unit = [50000,10000,5000,1000]
for i in range(len(unit)):
print('{}원 지폐 : {}장'.format(unit[i],money//unit[i]))
money = money % unit[i]
calculate_change(100000, 33000)
print("=============")
calculate_change(500000, 378000)
매개 변수와 글로벌 변수
- 함수에 들어가는 입력변수들
- local 변수 : 함수 안에서 만든 변수는 함수 안에서만 살아있다가 함수 코드가 실행 종료되면 변수도 같이 사라짐
- global 변수 : 함수 외부에서 만든 변수는 프로그램이 실행되어 있는동안에 계속 살아있음
def func(*args):
for i in args:
print(i)
func(1,2,3,4)
def func(**kwargs):
for i in kwargs:
print(i)
func(a=1, b=2, c=3)
a = 3
def f():
global a
a += 1
print(a)
f()
print(a)
파이썬 함수 작성 규칙들
- 변수 이름과 함수 이름은 소문자로, 여러 단어일 경우_로 나눔.
- 적당한 띄어쓰기로 가독성을 높임.
- 적당한 변수명 및 함수명 선언으로 남이 봐도 이해할 수 있도록 하기.
generator 와 yield
- yield를 통해 생성된 값들은 바로 계산되지 않고 호출 되었을 때 비로소 계산됨(lazy operation)
재귀함수
- 자기 스스로를 호출하는 함수
- 재귀 호출의 단계가 깊어질 수록 메모리를 추가적으로 사용하므로 종료조건을 분명히 해야함
def func(count):
if count>0:
print(count,'현재')
func(count-1)
print('결과', count)
func(10)
def fat1(num):
if num>0:
return fat1(num - 1) * num
else:
return 1
print(fat1(5))
중첩함수
- 함수 안에 정의된 함수
- nonlocal : 중첩함수에서 쓰이는 로직 -> 한단계 밖에있는 변수를 사용하겠다
def func1(a):
def func2():
nonlocal a
a +=1
return a
return func2()
func1(2)
lambda 함수
- 이름이 없는 한 줄 짜리 함수
- lambda 인수 나열 : 반환할 내용
- 인수가 없으면 생략가능
def run(func, x):
print(func(x))
run(lambda x:x+1, 2)
a1 = [1,2,3,4,5]
b2 = [9,8,7,6,5]
result2 = list(map(lambda a,x : a*x, a1, b2))
print(result2)
유용한 내장함수들
- 내장 함수란 따로 정의하지 않아도 이미 파이썬에서 기본적으로 정의되어 있는 함수들!
- len(),sum(),print(),str(),int()와 같이 이미 우리가 쓰고있던 함수들
- enumerate(리스트) -> 리스트의 원소와 인덱스 값을 모두 생성한다.
- zip(리스트1, 리스트2) : 두 개의 리스트를 합쳐서 각 원소의 쌍을 원소로 가지는 하나의 리스트를 반환
- map(함수, 컬렉션) : 함수와 컬렉션(list, tuple 등)을 매개변수로 받아 컬렉션의 모든 데이터를 함수의 매개변수로 대입해서 결과를 리턴하는 함수
- filter(함수, 컬렉션) : 함수와 컬렉션(list, tuple 등)을 매개변수로 받아 컬렉션의 모든 데이터를 함수의 매개변수로 대입해서 결과가 참인 컬렌션의 멤버들을 반환하는 함수
list(filter(lambda x : x%2==0, [1,2,3,4]))
x = [23, 45, 76]
for i, s in enumerate(x):
print(i, ":", s)
list1 = [1,2,3,4]
list2 = [5,6,7,8]
for i, j in list(zip(list1,list2)):
print(i)
print(j)
외장함수들
- 다른 사람이 미리 정의해 놓은 함수
- 상당수는 파이썬이랑 같이 자동으로 설치됨
- 라이브러리 : 남들이 미리 작성해 놓은 코드들의 집합을 뜻한다'
time
- time.time() : UTC를 사용하여 현재 시간을 실수 형태로 반환
- time.sleep(x) : x초 동안 대기한다.
- time.localtime() : time.time()에서 나온 실수값을 이용하여 연도,월,일,시,분,초 의 형태로 객체로 바꿔주는 함수
- time.strftime(출력할 형식, time.localtime(time.time())) : time.localtime으로 만든 객체를 출력할 형식 모양에 맞춰서 출력
os, sys
- sys.path : 파이썬 모듈들이 저장되어 있는 위치 변환
- os : 환경변수, 디렉토리, 파일 등의 os자원을 제어하는 모듈
- os.environ : 내 시스템 환경 보기
- os.getcwd() : 현재 위치 확인
- os.chdir(path) : 현재 디렉토리 위치 변경
import time
time.strftime("%Y-%m-%d", time.localtime(time.time()))