함수
함수 정의1
def 함수명( ):
코드
함수 호출1
함수명( )
- 특정용도의 코드를 한 곳에 모아 놓은 것
- 함수명 짓는 방법은 변수명 짓는 방법과 같음.
- 반드시 위에서 함수를 먼저 정의한 후, 아래에서 함수를 호출해야 함.
(파이썬 코드는 위에서 아래로 순차적으로 실행됨.)
함수 정의2
def 함수명 (매개변수1, 매개변수2):
코드
함수 호출2
함수명(인수1, 인수2)
- 함수에서 return을 사용하면 함수에서 반환된 값을 변수에 저장할 수 있음.
- return은 함수를 호출해준 바깥에 결과를 알려주기 위해 사용함.
- return 다음에 식을 콤마로 나열하여 여러 개의 반환값을 리턴할 수도 있음.
def add(a,b):
return a+b
x = add(10,20)
print(x)
def dual(a,b):
return a+b, a-b
x, y = dual(10,20)
print(x)
print(y)
- 스택 프레임: 메모리에서 함수와 함수에 속한 변수가 저장되는 독립적인 공간
- 전역 프레임: 파이썬 스크립트 전체에서 접근할 수 있는 공간
- 함수를 호출하면 스택의 아래쪽 방향으로 함수가 추가되고, 함수가 끝나면 위쪽 방향으로 사라짐.
- 전역 프레임은 스크립트 파일의 실행이 끝나면 사라짐.
인수 언패킹
- 리스트나 튜플은 앞에 *을 붙여주면 언패킹됨.
- 딕셔너리는 앞에 **을 붙여주면 언패킹됨.
- 언패킹된 리스트, 튜플, 딕셔너리는 함수 호출 시 인자에 넣어줄 수 있음.
- 이때 함수의 매개변수 개수와 리스트, 튜플, 딕셔너리의 요소의 개수는 같아야 함.
def print_num (a,b,c):
print(a)
print(b)
print(c)
x = [10, 20, 30]
print_num(*x)
------------------------------------------
def info (name, age, job):
print('이름:' , name)
print('나이:', age)
print('직업:', job)
human = {'name': 'seongjin' , 'age':27 , 'job': 'student'}
info(**human)
가변 매개변수 함수
def 함수명(*매개변수):
코드
def print_num(*args):
for arg in args:
print(arg)
x=[10, 20, 30]
print_num(10)
print_num(10,20)
print_num(10,20,30)
print_num(*x)
키워드 가변 매개변수 함수
def 함수명(**매개변수):
코드
def info(**kwargs):
for kw, arg in kwargs.items( ):
print(kw, ':', arg, sep=' ')
info (name='seongjin')
info (name='seongjin', age=27)
info (name='seongjin', age=27, job='student')
매개변수에 초기값 지정
def 함수명 (매개변수=값):
코드
def info (name, age, address='비공개'):
print('이름: ', name)
print('나이: ', age)
print('주소: ', address)
>>> info ('홍길동',30)
이름: 홍길동
나이: 30
주소: 비공개
>>> info ('홍길동', 30, '서울시 강남구')
이름: 홍길동
나이: 30
주소: 서울시 강남구
---------------------------------------------------------
def info (name, address='비공개', age): #SyntaxError 발생
print('이름: ', name)
print('나이: ', age)
print('주소: ', address)
* 초기값이 지정된 매개변수는 뒤쪽으로 몰아줘야 함.
재귀호출
- 함수 안에서 함수 자기자신을 다시 호출하는 것
def hello( ):
print("hello, world")
hello( )
hello()
-------------------------------------------
[ 재귀호출에 종료조건 만들기 ]
def hello(count):
if count == 0:
return
print("hello, world", count)
count -= 1
hello(count)
hello(5)
-------------------------------------------
[ 재귀호출로 팩토리얼 구하기 ]
def factorial(n):
if n==1:
return 1
return n * factorial(n-1)
print(factorial(5))
람다 표현식 (= 익명 함수)
- lambda 매개변수 : 반환식
def plus_ten(x):
return x + 10
↓
lambda x : x+10
------------------------------------------------
[ 람다 표현식을 변수에 할당하여 호출하기 ]
plus_ten = lambda x : x+10
plus_ten (1)
----------------------------------------------------------
[ 람다 표현식을 변수에 할당하지 않고, ( 람다 표현식 ) ( 인수 ) 형식으로 호출하기 ]
( lambda x : x+10 ) (1)
조건부 람다 표현식
lambda 매개변수: 반환식1 if 조건식 else 반환식2
( 조건식이 참이면 반환식1 / 거짓이면 반환식2 )
map
리스트나 튜플의 요소를 지정된 함수로 처리해줌 (새로운 리스트 및 튜플 생성)
map(함수, 리스트)
map(함수, 튜플)
>>> a = [ 1.2 , 2.5 , 3.7 , 4.6 ]
>>> a = list (map (int , a))
>>> a
[1, 2, 3, 4]
>>> a= input().split()
10 20 (입력)
>>>a
['10', '20']
>>> a = list(map(int, input().split()))
10 20 (입력)
>>> a
[10, 20]
>>> a, b = map(int, input().split())
10 20 (입력)
>>> a
10
>>> b
20
filter
- 반복가능한 객체에서 특정 조건에 맞는 요소만 가져옴.
- 지정한 함수의 반환값이 True일때만 해당 요소를 가져옴.
filter(함수, 반복가능한 객체)
>>> def f(x):
return x > 5 and x <10
>>> a= [8, 3, 2, 10, 15, 7, 1, 9, 0 ,11]
>>> list (filter (f, a))
[8, 7, 9]
reduce
- 반복가능한 객체의 각 요소를 지정된 함수로 처리 한뒤 이전 결과와 누적해서 반환하는 함수
- functools 모듈에서 reduce함수를 가져와야 사용 가능함.
reduce(함수, 반복가능한 객체)
from functools import reduce
>>> def f (x, y):
return x+y
>>> a = [1, 2, 3, 4, 5]
>>> reduce(f, a)
15