🔗 함수(Function)
프로그래밍에서 함수는 독립적으로 설계된 프로그램 코드의 집합이다. 함수를 사용하면반복적인 코드의 양을 줄여 유지보수성을 높여준다.
함수는 반복 사용되는 코드를 용도에 맞게 함수 바디에 모아두고 재사용 가능하도록 호출 가능하게 만든 것이다.
🔗 매개변수(Parameter)
함수를 정의할 때 사용하는 이름
🔗 실행인자(Arguments)
함수를 실행할 때 넘기는 변수, 값
메인 코드
에서 선언한 인수(arguments)
를 함수 정의부
의 매개변수(인자, parameter)
에 넣어 함수 실행return
값을 반환input | black box | output | |
---|---|---|---|
구조 | 메인 코드 arg1, arg2 | 함수 정의부 정의된 함수 호출 후 실행 | 메인 코드 return |
수식 | x = func_n(arg1, arg2) print(x) | def func_n(param1, param2) : result = param1 + param2 return result | return : result -> x |
예제 | arg1 = 3 arg2 = 5 | param1 <- arg1 : 3 param2 <- arg2 : 5 | 8 함수에 의해 3+5 계산 return 받은 x값 8출력 |
def 함수명(parameter1, 인자2, ..) :
함수 코드
return 반환값
x = 함수명(arguments1, 인수2, ..)
print("결과값 : ", x)
함수는 전달할 인자와 반환 값의 유무에 따라 다양한 구조로 만들 수 있다.
# 인자, 반환값 모두 없는 함수
def my_func() :
print("함수를 정의했다.")
my_func() # 함수 입력 -> 함수 실행
------------------------------------
함수를 정의했다.
# 인자는 있으나 반환값은 없는 함수
def my_func(number) :
print("number : ", number)
my_func(3)
--------------------------------
number : 3
# 인자, 반환값 모두 있는 함수
def my_func(number) :
result = number + number
return result
my_func(3)
--------------------------------
6
파라미터에 '기본값(default value)'을 설정할 수 있다. 기본값을 설정해 두면 함수를 호출할 때 파라미터에 값을 꼭 넘겨주지 않아도 된다. 옵셔널 파라미터는 꼭 마지막에 입력해야 한다.
def my_func(num, num2=3) :
result = num + num2
my_func(3)
----------------------------
6
기본적으로 함수 안에서 정의한 변수는 함수 안에서만 사용할 수 있다. 즉, 함수 안에서 생성한 변수는 함수를 호출해 실행되는 동안만 사용할 수 있고, 함수 실행이 끝나면 더는 사용할 수 없다.
지역 변수 local variable
- 함수 안에서 정의하여 함수 영역 안에서만 동작하는 변수전역 변수 global variable
- 함수 밖에서 정의하여 어디서나 사용할 수 있는 변수함수를 어디에서 정의했느냐에 따라 코드 내에서 영향을 미치는 유효 범위가 달라진다.
지역 영역 local scope
: 지역 변수를 저장하는 이름 공간전역 영역 global scope
: 전역 변수를 저장하는 이름 공간내장 영역 built-in scope
: 파이썬 자체에서 정의한 이름 공간함수에서 어떤 변수를 호출하면 지역 영역, 전역 영역, 내장 영역 순서대로 변수가 있는지 확인하는 것을 스코핑 룰 (Scoping rule)
혹은 LGB 룰 (Local/Global/Built-in rule)
이라고 한다.
함수인자
= 매개변수
def 함수이름(위치인자, 위치인자2, *가변위치, 키워드인자, 키워드인자, **가변키워드)
/
기준으로 좌측에 위치한 인자def posionly(posionly, /) :
*
기준으로 우측에 위치한 인자def keyonly(*, keyonly="default") :
# default 값이 있는 parameter에 대해서는 argument를 생략해도 정상 작동한다.
*변수명
def var_positional(*args) :
**변수명
def var_keyword(**kargs) :
def a_and_b(x):
a = x + 2
b = x + 3
return a, b
# 리턴값 변수에 저장
apple, banana = a_and_b(2)
(lambda 인자 : 반환값으로 사용할 식) (인자)
lambda_function = lambda 인자 : 인자 활용 수행 코드
lambda_function(인자)
콜백 함수가 하나일 때 람다식을 사용하는 것이 용이하다.
(lambda x : x*2) (3)
# 6
# 뒤쪽 소괄호 안에 인수 3을 넣으면, 람다 표현식이 바로 호출된다.
# 파이썬은 함수를 변수에 할당 가능하다.
my_func = lambda x, y : x + y
my_func(1, 2)
# 3
True일 때 값
if 조건식
else
False일 때 값
먼저 if 조건식
을 확인하고, True면 True일 때 값
호출, False면 False일 때 값
호출
리스트의 모든 원소 조작 가능
map(lambda parameter1, parameter2, .. : expression, iterable1, iterable2, ..)
a = [_ for _ in range(1, 6)]
b = [_ for _ in range(2, 11, 2)]
print(list(map(lambda x, y : x*y, a, b)))
[2, 8, 18, 32, 50]
result = map(lambda x: ('성인' if x['age'] > 20 else '청소년'), people)
print(list(result))
# 나이를 확인하여 20 이상이면 성인을 호출, 이하면 청소년을 호출
일반 사용
# 인자의 타입 일괄 변경
list1 = ['1', '100', '33']
list4 = [[1], [1,1,1], [1,1]]
list2 = list(map(int, list1)) # [1, 100, 33]
list3 = list(map(len, list4)) # [1, 3, 2]
리스트의 모든 원소 중 특별한 것(True인 것)만 뽑기
filter(lambda parameter : expression, iterable)
True
일 때만 expression
반환식을 가져온다.a = [3, 2, 8, 22, 10, 7, 0, 11, 9, 9]
list(filter(lambda x : x % 3 == 0 and 0 < x < 10, a))
int()
, float()
, str()
, list()
, tuple()
, set()
bool()
def print_name(name) :
if bool(name) :
ptint("입력된 이름 :", name)
else :
print("입력된 이름이 없습니다.")
내장 함수 | 설명 |
---|---|
min() | 최솟값 구하기 |
max() | 최댓값 구하기 |
abs() | 절댓값 구하기 |
sum() | 전체 합 구하기 |
len() | 항목 개수 구하기 |
sorted(list[, key=function, reverse=bool])
key
: 정렬 기준 선택reverse
: 오름차순/내림차순 설정list1 = [3, 8, 4]
list2 = [[2, ‘a’], [1, ‘b’], [8, ‘c’]]
# 2중 리스트 정렬
sorted(list2, key = lambda x: x[0]) # [[1, ‘b’], [2, ‘a’], [8, ‘c’]]
# 다중 조건 정렬
# key = lambda x: (x[0] , x[2])
# 내림차순은 - 기호 붙인다. (-x[0])
array = [("A", 18, 300000) , ("F", 24, 10000), ("T", 24, 200000),("Q",24,5000000), ("B", 70, 5000)]
sorted(array, key = lambda x: (x[0] , x[2]))
.join
사용 시,
def solution(my_string, k):
answer = ''.join(my_string * k)
return answer
solution("abc", 3)
'abcabcabc'
print
사용 시,
def solution(my_string, k):
answer = print(my_string * k)
return answer
solution("abc", 3)
abcabcabc
for a in enumerate(list):
print('{}번째 값: {}'.format(a[0], a[1]))
for a in enumerate(list):
print('{}번째 값: {}'.format(*a))
# *a : a의 내용을 쪼개라
for a in dict.items():
print('{}의 나이는:{}'.format(a[0], a[1]))
for a in dict.items():
print('{}의 나이는:{}'.format(*a))