본문 바로가기

Python 파이썬

파이썬 수첩 (함수 / 인수 언패킹 / 가변 매개변수 함수 / 키워드 가변 매개변수 함수 / 재귀호출 / 람다 표현식 / 조건부 람다 표현식 / map / filter / reduce )

반응형

 

함수

 

함수 정의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

반응형