어제에 이어 오늘도 함수에 대해 공부했다. 내용이 많아서 완벽하게 이해하려면 복습을 철저히 하고, 매개변수와 인자를 활용하는 방법도 다양해서 연습을 많이 해봐야 익숙해질 것 같다.
인자의 순서대로 매개변수에 대응되는 방식 → 가장 일반적이고 기본적인 전달 방법
def add(a, b):
return a + b
add(10, 20) # 10 = a, 20 = b에 대응
인자의 이름을 명시하여 전달하는 방식
순서와 무관하게 매개변수에 대응 가능 → 인자의 순서를 헷갈릴 때 안전하게 사용
def introduce(name, age):
return(f"")
기본값 매개변수는 뒤쪽에 위치해야함 (SyntaxError 발생)
def greet(name, message="안녕하세요!"):
return(f"{name}님 {message}")
print(greet("taehyun"))
print(greet("taehyun", "반갑습니다"))
# taehyun님 안녕하세요!
# taehyun님 반갑습니다
여러개의 값을 유동적으로 받을 수 있음
값이 튜플 형태로 받아짐
def add_all(*args):
return sum(args)
add_all(1,2,3,4,5)
# 15
여러 키워드 인자를 유동적으로 받을 수 있음
딕셔너리 형태로 값이 입력
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key} : {value}")
print_info(name="taehyun", age="27", city="서울", job="student")
# name : taehyun
# age : 27
# city : 서울
# job : student
여러 가변인자를 한번에 사용 가능
단, 순서가 맞아야 가능
위치인자 → 키워드인자 → *args → **kwargs
함수의 메모리 구조 = 스택 (Stack) 구조
- first in last out
def deep_func():
print("더 안쪽 함수")
def inner_func():
deep_func()
print("안쪽 함수")
def outter_func():
inner_func()
print("바깥쪽 함수")
outter_func()
# 더 안쪽 함수
# 안쪽 함수
# 바깥쪽 함수
반대되는 구조 = 큐 방식
- first in first out
스코프 (Scope) : 어떤 이름 (변수, 함수 등)을 참조할 수 있는 코드의 범위
x = 100 # 전역 변수
def my_func():
x = 10 # 지역 변수
print(x)
def any_func():
x = 20 # 이름이 같아도 지역이 다르면 다른 변수
print(x)
# 함수안의 함수의 관점에서 자신이 Local 위의 함수가 Enclosing 그 이후가 Global 그 이후의 python 전체를 built-in
x = 10
def my_func():
global x
x += 5
print("지역", x)
my_func()
print("전역", x)
# 지역 15
# 전역 15x = 10
def func1():
global x
x += 10
def func2():
global x
x *= 2
func1()
func2()
print(x)권장하는 패턴
x = 10
def my_func(x): # 매개변수는 지역에 존재
x += 5
return x
x = my_func(x)
print("전역", x)
# 전역 15
# 1. 숫자 여러 개의 평균 구하기
def average(*args):
# 예외처리
if len(args) == 0:
return 0
return sum(args) / len(args)
print(average(10,20,30,40))
# 2. 가장 긴 문자열 찾기
# 방법 1
def max_word(*args):
answer = ""
for s in args:
if len(s) > len(answer):
answer = s
return answer
print(max_word("apple", "banana", "watermelon", "orange"))
# 방법 2
def max_word2(*args):
return max(args, key=len)
print(max_word2("apple", "banana", "watermelon", "orange"))
# 3. 사용자 정보 출력 함수
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key} : {value}")
print_info(name="taehyun", age="27", city="서울")
# 4. 할인 계산기
def items_list(**kwargs):
for key, value in kwargs.items():
value *= 0.9
print(f"{key} : {value}")
items_list(a=10000, b=25000)
current_user = ""
def login(name):
global current_user
if current_user == "": # == / is로 사용 가능
current_user = name
print(f"{name}님 로그인 성공")
else:
print("이미 로그인되어 있습니다.")
def logout():
global current_user
current_user = ""
print("로그아웃되었습니다.")
login("taehyun")
login("taehyun_test")
logout()
login("taehyun_test")
print(current_user)
함수 파트는 개념 정리도 쉽지 않지만, 문제 풀이에서는 응용력이 많이 요구되어 지금은 더 어렵게 느껴지는 것 같다.
특히 매개변수와 인자를 다루는 부분은 내용도 많고 서로 비슷한 부분도 있어서, 계속 문제를 풀어보며 원리를 이해하려고 노력해야 할 것 같다.
또한, 가변 인자인 *args와 **kwargs도 앞으로 꾸준히 연습해봐야겠다.