파라미터 : 함수를 선얼할때 호출하는 부분에서 보내주는 데이터를 받는 변수
아규먼트 : 함수를 호출할때 함수에 보내주는 데이터
✔ 디폴트 파라미터로 num2 = 10을 설정하고 아무숫자를 입력하지 않으면 num2는 10으로 인식한다.
def plus(num1, num2=10):
print(num1+num2)
plus(7) # 아규먼트
plus(7, 7)
함수에서 return이 실행되면 결과를 저장한다.
함수에서 return이 실행되면 함수의 코드 실행이 종료된다.
✔ 함수의 return 기능
def echo(ppp):
if ppp == 'quit':
return 123
print(777)
print(echo('quit'))
echo('hello')
함수의 파라미터 순서 : 일반변수, *변수, **변수
*변수 : 여러개가 아규먼트로 들어올 때, 함수 내부에서는 해당 변수를 '튜플'로 처리한다. (여러개의 인자를 함수로 받고자 할 때 사용)
**변수 : 키워드='' 로 입력할 경우에 그것을 각각 키와 값으로 가져오는 '딕셔너리'로 처리한다. ('키워드' = '특정값' 으로 사용)
✔ 기본형태
def plus(*args, **kwargs):
print(type(args), args)
print(type(kwargs), kwargs)
return sum(args)
plus(1,2,3,4,5, num1=6, num2=7)
함수의 설명 작성
shift + tab 으로 확인 ( xxx?, xxx??, help(xxx) 으로도 확인 가능)
✔ docstring 설명을 여러줄로 쓸때
def echo(msg):
"""
echo func return its input argument
The operation is:
1. print msg parameter
2. return msg parameter
param : msg : str
return : str
"""
print(msg)
return msg
함수 안에서 선언되는 변수와 밖에서 선언되는 변수의 범위는 다르다.
global(전역), local(지역) : 함수 안에서 실행되는 변수가 local(지역)이고, 바깥에서 실행되는 변수가 global(전역) 변수이다.
✔ 일반적으로 지역변수는 전역변수에 영향을 줄 수 없다.
x = 11 # 전역변수
def f():
x = 99 # 지역변수
f()
print(x) # 전역변수(11) 출력됨
✔ global 명령어를 사용하면 지역변수가 전역변수에 영향을 줄 수 있다.
x = 11
def f():
global x # 함수f의 지역변수를 전역변수로 쓰겠다는 것
x = 99
f()
print(x) # global로 인해 함수f에서 지역변수의 값이 전역변수로 적용되어 99가 출력됨
✔ global 명령어를 사용하면 지역변수가 전역변수에 영향을 줄 수 있다.
x = 11
def f():
x = 77
def g():
x = 88
def h():
global x # 함수h의 지역변수를 전역변수로 쓰겠다는 것
x = 99
h()
g()
f()
print(x) # global로 인해 함수h에서 지역변수의 값이 전역변수로 적용되어 99가 출력됨
✔ nonlocal 명령어를 사용하여 지역변수가 아님을 선언하고 한단계 바깥에 위치한 변수와 묶어준다. (함수를 하나만 정의하고 전역변수에 묶는건 안됨)
x = 20
def g():
x = 80
def h():
nonlocal x # 바로 전단계인 함수g에 적용시킨다는 말
x = 99
h() # 함수h가 실행되어 nonlocal이 적용됨
print(x) # 99 출력
g()
print(x) # 20 출력 (nonlocal은 g와 h사이의 관계에서 끝난것임)
함수가 지역영역에서 선언된 것 ( 함수 안에서 함수가 선언된 것 )
callback function : 함수를 아규먼트 파라미터로 설정해서 사용
✔ 함수 안에서 선언된 함수는 전역영역에서 사용이 불가능 하다
def outer(a, b):
def inner(c, d):
return c + d
return inner(a, b)
print(outer(1,2)) # 3 출력
print(inner(2,3)) # 에러발생
✔ 지역영역에서 선언된 함수를 전역영역에서 쓰게 하고 싶을 때
def outer(a, b):
def inner(c, d):
return c + d
return inner
outer(999, 2)(3, 4) # 7 출력
✔ callback function
def calc(func, a, b):
a **= 2
b **= 2
return func(a, b)
def plus(x, y):
return x + y
calc(plus, 1, 2) # 5 출력
✔ :의 앞부분이 파라미터 부분이고 :의 뒷부분이 리턴되는 부분이다
def calc(func, a, b):
a **= 2
b **= 2
return func(a, b)
calc(lambda a, b: a * b , 3 , 4) # 144(9*16)출력
✔ map 적용
def odd_even(num):
return "odd" if num % 2 else "even"
ls = [1, 2, 3, 4]
list(map(odd_even, ls)) # ls에 odd_even을 모두 적용시키고 결과는 list로 출력
✔ filter 적용
ls = range(10)
list(filter(lambda data: True if data % 2 else False , ls)) # 홀수만 리스트로 출력
✔ reduce는 functools에서 import해와야 한다
from functools import reduce
ls = [3, 1, 2, 4, 5]
reduce(lambda x, y : x + y, ls) # 15 출력
def a():
code_1
code_2
code_3
def b():
code_1
code_4
code_3
a함수와 b함수의 코드1, 코드3이 겹치는데 이렇게 여러 함수들 안의 코드들이 겹치는게 있을 때 a함수에는 코드2만 쓰고 b함수에는 코드4만 써도 모든 코드가 다 돌아가게 할수 있다.