1.기본함수
2.파라미터와 아규먼트
- 파라미터 : 함수선언시 값을 받는 변수명
- 아규먼트 : 함수호출시 값을 전달하는 데이터
디폴트 파라미터
def minus(num1, num2=10):
print(num1 - num2)
minus(3)
minus(3, 5)
---
> -7
> -2
# 디폴트 파라미터는 항상 가장 뒤에 선언이 되어야 합니다.
def minus(num1, num3, num2=10, num4=100):
print(num1 - num2 - num3 - num4)
minus(5, 3)
minus(5, 3, 20)
---
> -108
> -118
키워드 아규먼트
def minus(num1, num2):
print(num1 - num2)
minus(3, 2) # 순서대로 파라미터에 대입
minus(num2=5, num1=2) # 순서에 상관없이 키워드값으로 매핑되서 파라미터에 대입
---
> 1
> -3
print("test", end="\t")
print("test2")
> test test2
3.리턴
# 여러개의 데이터를 리턴
def echo(a, b):
return a, b
data1, data2 = echo("fast", "campus")
data1, data2
---
> ('fast', 'campus')
# 함수를 중간에 종료 시킬때 사용됩니다.
def test_func(number):
if number > 10:
print("error")
return
print(number)
test_func(15)
---
> error
4. *args
, **kwargs
*args
: 한꺼번에 여러개의 아규먼트 데이터를 받아올때 사용**kwargs
: 한꺼번에 여러개의 키워드 아규먼들 받아올때 사용
*args
def plus(*args):
return sum(args)
plus(1, 2, 3, 4)
---
> 10
ls = [1, 2, 3, 4]
# plus(ls) #의미: plus([1, 2, 3, 4])
plus(*ls) #의미: plus(1, 2, 3, 4)
---
> 10
ls = (1, 2, 3, 4)
# plus(ls) #의미: plus((1, 2, 3, 4))
plus(*ls) #의미: plus(1, 2, 3, 4)
---
> 10
ls = {1, 2, 3, 4}
# plus(ls) #의미: plus({1, 2, 3, 4})
plus(*ls) #의미: plus(1, 2, 3, 4)
---
> 10
**kwargs
def avg_func(**kwargs):
print(kwargs)
---
avg_func(korean=90, math=80, english=60, science=90)
> {'korean': 90, 'math': 80, 'english': 60, 'science': 90}
# *args **kwargs 함께 사용
def test(*args, **kwargs):
print(args)
print(kwargs)
test(1, 2, 3, fast=10, campus="test function")
---
> (1, 2, 3)
{'fast': 10, 'campus': 'test function'}
5.Docstring
- 함수에 대한 설명을 할때 사용한다.
6.Scope
- 전역변수와 지역변수.
7.Inner Funtion
- 함수 안에서 선언된 함수
- 지역 함수
- 자원을 효율적으로 사용하기 위함
def outer(a, b):
def inner(c, d):
return c + d
return inner(a, b)
outer(3, 5)
---
> 8
def outer():
def inner(c, d):
return c + d
return inner
outer()(3, 5)
---
> 8
def plus(c, d):
return c + d
def minus(c, d):
return c - d
def outer(func, a, b):
return func(a, b)
outer(plus, 5, 3)
outer(minus, 5, 3)
---
> 8
2
8.Lambda Function
- 함수를 한줄로 간결하게 만들 때 사용한다.
- 익명함수이기 때문에 한번 쓰이고 다음줄로 넘어가면 heap 메모리 역역에서 증발한다.
plus = lambda a, b: a + b
plus(1, 2)
---
> 3
def calc(f, x, y):
return f(x, y)
calc(lambda a, b : a + b, 5, 3)
---
> 8
9. Map, Filter, Reduce
Map
- 입력받은 자료형의 각 요소가 함수(f)에 의해 수행된 결과를 묶어서 리턴하는 함수이다.
def two_times(x):
return x*2
list(map(two_times, [1,2,3,4,]))
---
> [2, 4, 6, 8]
lambda와 map 함께 사용하기
list(map(lambda x, y : x + y, ls1, ls2))
---
> [6, 8, 10, 12]
#map에 여러개의 파라미터 사용하기
ls1 = [1, 2, 3, 4]
ls2 = [5, 6, 7, 8]
def sum_func(a, b):
return a + b
list(map(sum_func, ls1, ls2))
---
> [6, 8, 10, 12]
Quiz
# 문제: map을 이용하여 name의 성만 출력하는 코드를 작성
names = ["kim test", "Lee python", "PARK macbook"]
list(map(lambda name : name.split(" ")[0].upper()[0] + name.split(" ")[0].lower()[1:] , names ))
---
> ['Kim', 'Lee', 'Park']
Filter
Reduce
ls = [3,1,5,7,1]
reduce(lambda x, y : x + y , ls)
=> 17
reduce(lambda x, y : x if x > y else y , ls)
=> 7
10. Decorlator
- 코드를 바꾸지 않고 함수의 기능을 추가 및 수정 하고 싶을때 사용하다.
- 함수에서 공통된 코드 부분을 따로 묶어서 관리할수 있는 장점이 있다.
- 지역함수와
args
,**kwargs
구현합니다.
def A():
code_1
code_2
code_3
def B():
code_1
code_4
code_3
def C(func):
def wrapper(*args, **kwargs):
code_1
func(*args, **kwargs)
code_3
return wrapper
@C
def A():
code_2
@C
def B():
code_4
def sum_int(a,b):
return a+b
def disp_func(func):
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
print("function name", func.__name__)
print("args", args)
print("kwargs", kwargs)
print("result : ", result)
return result
return wrapper
데코레이터를 안쓰고 데코레이터와 비슷하게 구현
new_sum_int = disp_func(sum_int)
new_sum_int(5,7)
=> function name sum_int
args (5, 7)
kwargs {}
result : 12
12
데코레이터 사용하기
@disp_func
def sum_int(a, b):
return a + b
sum_int(5,7)
=> function name sum_int
args (5, 7)
kwargs {}
result 12
12
데코레이터 함수를 이용해서 함수에 아이디를 입력하면 아이디가 저장되어 있으면 패스워드를 알려주는 코드
admin_ls = ["fast", "campus"]
pw = "qwer1234"
def admin(func):
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
if result in admin_ls:
print("allow permission")
print("pw", pw)
is_admin = True
else:
print("you are not admin")
return is_admi
return wrapper
@admin
def input_id():
return input("insert id :")
input_id()
=> insert id : fast
allow permission!!
pw qwer1234
True
댓글남기기