OX 10문항 + 5지선다형 10문항 학습용 HTML
X
파이썬은 함수를 만들 때 function이 아니라 def 키워드를 사용한다. def는 define의 줄임말로, 함수 이름과 매개변수 뒤에 콜론(:)을 붙이고 들여쓰기한 코드 블록을 작성한다.
def hello():
print('안녕하세요')
hello()
안녕하세요
O
함수에서 return을 쓰지 않으면 파이썬은 자동으로 None을 반환한다. print()로 화면에 출력하는 것과 값을 반환하는 것은 다르다.
def greet():
print('반갑습니다')
result = greet()
print(result)
반갑습니다
None
X
*args는 여러 개의 위치 인자를 튜플 형태로 받는다. 키워드 인자를 딕셔너리 형태로 받는 것은 **kwargs이다.
def show(*args):
print(args)
show(10, 20, 30)
(10, 20, 30)
X
lambda는 이름 없이 간단한 함수를 만들 때 사용하지만, 한 줄짜리 표현식만 쓸 수 있다. 여러 문장이나 복잡한 흐름은 def 함수로 작성해야 한다.
double = lambda x: x * 2
print(double(5))
10
X
지역 변수는 함수가 실행되는 동안 함수 내부에서만 사용할 수 있다. 함수 밖에서 같은 이름을 사용하려면 별도의 전역 변수이거나 return으로 값을 받아야 한다.
def make_score():
score = 100
return score
result = make_score()
print(result)
100
O
매개변수에 미리 값을 지정하면 기본 매개변수가 된다. 호출할 때 해당 인자를 생략하면 기본값이 사용되고, 값을 전달하면 전달한 값이 사용된다.
def add(a, b=10):
return a + b
print(add(5))
print(add(5, 3))
15
8
X
**kwargs는 키워드 인자를 딕셔너리 형태로 받는다. 위치 인자를 튜플로 받는 것은 *args이다.
def profile(**kwargs):
print(kwargs)
profile(name='민수', grade=1)
{'name': '민수', 'grade': 1}
O
재귀 함수는 함수 내부에서 자기 자신을 호출한다. 반드시 멈추는 조건이 있어야 무한 호출을 피할 수 있다.
def count_down(n):
if n == 0:
print('끝')
else:
print(n)
count_down(n - 1)
count_down(3)
3
2
1
끝
O
파이썬에서 함수는 일급 객체이다. 따라서 변수에 저장하거나, 다른 함수의 인자로 넘기거나, 함수의 반환값으로 사용할 수 있다.
def apply(func, x):
return func(x)
def square(n):
return n * n
print(apply(square, 4))
16
O
yield를 사용하면 함수는 한 번에 모든 값을 반환하지 않고, 필요할 때마다 값을 하나씩 만들어 내는 제너레이터가 된다.
def nums():
yield 1
yield 2
g = nums()
print(next(g))
print(next(g))
1
2
def
파이썬에서 함수 정의는 def 함수이름(매개변수): 형식으로 작성한다. func, define, function, fun은 파이썬 함수 정의 키워드가 아니다.
def add(a, b):
return a + b
print(add(2, 3))
5
Guest
name 매개변수의 기본값이 Guest로 지정되어 있으므로, 인자를 주지 않고 greet()을 호출하면 Guest가 출력된다.
def greet(name='Guest'):
print(name)
greet()
greet('철수')
Guest
철수
*args
*args는 개수가 정해지지 않은 위치 인자들을 하나의 튜플로 묶는다. 여러 숫자를 받아 합계를 구하는 함수 등에 사용할 수 있다.
def total(*args):
print(args)
print(sum(args))
total(1, 2, 3, 4)
(1, 2, 3, 4)
10
[2, 4, 6]
lambda x: x * 2는 입력값을 2배로 만든다. map은 리스트의 각 원소 1, 2, 3에 이 함수를 적용하므로 결과는 2, 4, 6이다.
result = list(map(lambda x: x * 2, [1, 2, 3]))
print(result)
[2, 4, 6]
global
함수 내부에서 전역 변수의 값을 직접 바꾸려면 global 키워드를 사용한다. 단, 전역 변수 수정은 코드 이해를 어렵게 할 수 있어 꼭 필요할 때만 사용한다.
count = 0
def up():
global count
count += 1
up()
print(count)
1
키워드 인수
매개변수 이름을 직접 지정하여 값을 전달하는 방식을 키워드 인수라고 한다. 순서가 바뀌어도 이름을 기준으로 값이 전달된다.
def func(a, b):
return a + b
print(func(b=5, a=3))
8
function의 반환 값이 True인 것만 모아서 반환
filter는 조건 함수가 True를 반환하는 요소만 남긴다. 결과는 filter 객체이므로 보통 list()로 변환해 확인한다.
nums = [1, 2, 3, 4, 5]
evens = list(filter(lambda x: x % 2 == 0, nums))
print(evens)
[2, 4]
"""설명"""
Docstring은 함수 바로 아래에 큰따옴표 세 개 또는 작은따옴표 세 개로 작성하는 공식 설명 문자열이다. help()나 __doc__으로 확인할 수 있다.
def add(a, b):
'''두 수를 더해 반환합니다.'''
return a + b
print(add.__doc__)
두 수를 더해 반환합니다.
데코레이터
데코레이터는 함수를 감싸서 실행 전후에 새로운 기능을 추가한다. 기존 함수 코드를 직접 수정하지 않고 로깅, 권한 확인, 실행 시간 측정 등을 붙일 수 있다.
def deco(func):
def wrapper():
print('시작')
func()
print('끝')
return wrapper
@deco
def hello():
print('안녕')
hello()
시작
안녕
끝
1
my_gen은 제너레이터 함수이다. g = my_gen()으로 제너레이터 객체를 만들고 next(g)를 처음 호출하면 첫 번째 yield 값인 1이 반환된다.
def my_gen():
yield 1
yield 2
g = my_gen()
print(next(g))
1