- 함수
- 함수 사용법
- argument & parameter
- return
- docstring
- scope
- lambda
🔹 함수 활용 예시
# 함수선언(코드작성)
def display_lotto():
lotto = []
while True:
random_number = random.randint(1, 45)
lotto.append(random_number)
lotto = list(set(lotto))
if len(lotto) >= 6:
break
lotto.sort()
print(lotto)
# 함수호출(코드실행)
display_lotto()
: 함수를 호출하는 코드에서 함수를 선언하는 코드로 데이터 전달할 때 사용
🔹 예시
import random
# 함수선언
def display_lotto(count): # count : parameter
lotto = []
while True:
random_number = random.randint(1, 45)
lotto.append(random_number)
lotto = list(set(lotto))
if len(lotto) >= count:
break
lotto.sort()
print(lotto)
# 로또번호 6개 출력
display_lotto(6) # 6 : argument
# 로또번호 7개 출력
display_lotto(7) # 7 : argument
🔹 default parameter
: default parameter를 설정하면 argument를 입력하지 않아도 설정된 값으로 연산을 수행
# 함수선언(코드작성)
def plus(n1, n2=10, n3=20): # n1 : parameter, n2=10, n3=20 : default parameter
print(n1 + n2 + n3)
# 함수호출(코드실행)
plus(1, n3=100) # 1 : argument, n3=100 : keyword argument
🔹 주의할 점
: default parameter는 항상 default값이 없는 parameter 뒤에 와야 함. 순서를 잘 지킬 것.
: 함수의 결과 데이터를 변수에 저장할 때 사용
: return 값을 도출하면 함수 코드가 중단됨
(🚨주의! 반복문이 중단되는 것이 아님. 반복문 중단은 break)
🔹 print와 return 비교
def plus1(n1, n2):
print(n1 + n2)
def plus2(n1, n2):
return n1 + n2
result1 = plus1(1, 2) # 결과가 변수에 저장되지 않음. print()로 그냥 출력할 뿐
result2 = plus2(2, 3) # 결과가 변수에 저장됨
print(result1, result2) # None, 5
🔹 return에 대한 2가지 경우
case 1) return이 있는 함수
: 데이터를 변경하지 않고 변경 결과를 변수에 저장
(ex. str.upper())
case 2) return이 없는 함수
: 데이터를 변경하고 변경 결과를 변수에 저장하지 않는 경우
(ex. list.sort())
(참고. 데이터를 변경하고 변경 결과를 변수에 저장하는 경우도 있긴 있음.)
🔹 함수를 중단시키는 return
def echo(msg, count):
for idx in range(count):
if idx > 5:
return # return하는 순간 함수 중단
print(msg)
print('Done') # return 자리에 break를 적었다면 'Done'이 출력됨
🔹 여러 개의 데이터를 return할 때
def calc(n1, n2):
return n1 + n2, n1 - n2 # tuple
plus, minus = calc(3, 1) # tuple은 python에서 각각 따로 데이터를 받을 수 있음.
plus # 4
minus # 2
: 함수를 설명하는 글
🔹 docstring에 포함되어야하는 내용
def plus(n1, n2):
'''
This function is to plus two numbers. # 1. 함수에 대한 설명
parameters # 2. 파라미터 설명
----------
n1 : int, float : first number
n2 : int, float : second number
return # 3. return 설명
-----
n1 + n2 : int, float
'''
return n1 + n2
🔹 docstring 확인하는 방법
: argument의 개수에 상관없이 함수를 실행하는 방법
🔹 예시
def plus(*args, **kwargs): # parameter에 컬렉션 데이터 타입을 받아줌 : 식별자 1개, 데이터 n개
print(type(args), args)
print(type(kwargs), kwargs)
plus(1, 2, 3, 4, 5, n1=10, n2=30) # 여러 개의 arguments
결과
<class 'tuple'> (1, 2, 3, 4, 5)
<class 'dict'> {'n1': 10, 'n2': 30}
=> parameter에서 *arg, **kwargs가 사용될 경우 여러 개의 arguemnt를 컬렉션 타입(tuple, dictionary)으로 묶어서 받아준다고 생각하면 쉬움.
그럼 그 반대의 경우도 살펴보자.
🔹 argument에서의 사용
def echo(*args, **kwargs):
print(type(args), args)
print(type(kwargs), kwargs)
data = [1, 2, 3]
echo(*data) # echo(1, 2, 3) > 아규먼트 : 3개, 데이터타입 : 정수
data = {'num1': 10, 'num2': 20}
echo(**data) # echo(num1=10, num2=20) > 키워드 아규먼트 2개, 데이터타입 : 정수
결과
<class 'tuple'> (1, 2, 3)
<class 'dict'> {'num1': 10, 'num2': 20}
=> argument에서 *arg, **kwargs가 사용될 경우 컬렉션 타입(list, tuple, dictionary)으로 묶인 것을 여러 개의 argument로 풀어준다고 생각하면 쉬움.
🔹 주의할 점
: parameter에서 언급했듯이 순서가 중요. keyword argument는 반드시 keyword가 없는 argument 뒤에 위치해야함.
🔹 변수 적용 범위
data = 10 # global
def change():
data = 20 # local
change()
print(data) # 10
# global : 지역영역에서 전역영역의 변수 사용 방법
data = 10
def change():
global data
data = 20
change()
print(data) # 20
# return : 전역영역에서 지역영역의 변수 사용 방법
data = 10
def change():
data = 20
return data
data = change()
print(data) # 20
전역에서 지역으로, 지역에서 전역으로... 이 부분 이해가 안된다.
: 간단한 함수(parameter, return)를 함수 선언 없이 사용할 수 있는 일회성 함수
: 메모리 절약, 가독성 향상
plus = lambda n1, n2 : n1 + n2
plus(1, 2) # 3
🔹 list comprehension
: 간단한 반복문, 조건문을 사용해서 리스트 데이터를 만들 때 사용하는 문법
: 주로 리스트 데이터를 필터링 하거나 데이터를 변경할 때 사용
: 속도 빠름
result = [number**2 for number in range(10) if number % 2]
result
📌순서 주의
non default parameter > default parameter
non keyword argument > keyword argument
📌함수를 중단시키는 것이 return. 반복문을 중단시키는 것은 break.
📌*arg, **kwargs
parameter에 위치: 여러 개 argument를 묶어서 받음
argument에 위치: 컬렉션 타입 데이터를 풀어줌
몸이 너무 안 좋아서 3시에 조퇴할까 생각했지만 참고 복습 및 TIL을 무사히 끝냈다. 오늘 처음으로 용기내어 강사님께 질문을 했다. 능동적으로 배우는 과정이 즐겁다.
중간에 졸려서 잠깐 정신을 잃었다. 수업이 지루해서가 아니라 코막힘으로 인해 피곤함이 쌓였던 것... 컨디션을 회복하자!
전역변수, 지역변수 정확한 의미 질문하고 확실히 내 것으로 만들기