4.4 doc string
함수의 도움말을 설정하고 싶을 때 doc string
을 이용해줄 수 있다.
ex) find_divisor
def find_divisor(n, max) :
'''
here is our doc string for find_divisor
'''
for i in range(2, max + 1) :
if n % i == 0 :
print (i, 'divides evenly into', n)
break
else :
print("No!!!!")
>>> help(find_divisor)
Help on function find_divisor in module __main__:
find_divisor(n, max)
here is our doc string for find_divisor
함수를 선언하고 나서 바로 다음 줄에 주석 블록을 통해 작성하면 된다.
4.7 일급 객체인 함수
파이썬 함수를 일급 객체(first-class)로 다루면 디버깅, 프로파일링, 관련 작업 수행 시 굉장히 유용한 도구를 하나 갖게 된다.
이 방법으로 런타임 시 함수 관련 정보를 확보하는 장점을 취할 수 있다.
ex) avg 함수
def avg(a_list) :
''' 리스트 항목들의 평균값 반환 '''
x = sum(a_list) / len(a_list)
print('The avg is : ' + x)
return x
avg는 이 함수를 참조하는 심벌릭 이름
이며 파이썬 언어 안에서 호출될 수 있는 콜러블(callable)
이기도 한다.
avg를 가지고 여러 작업을 수행할 수 있다.
1) avg가 가리키던 함수에 새로운 이름 부여
새로운 함수를 정의하겠다.
def new_func(a_list) :
return (sum(a_list) / len(a_list))
old_avg = avg
avg = new_func
이제 기존의 avg
가 가리키던 함수는 old_avg
라는 변수가 참조하게 되었고avg
라는 이름은 new_func
함수를 참조하게 되었다.
>>> old_avg([4, 6, 8])
The avg is : 6.0
6.0
>>> avg([4, 6, 8])
6.0
old_avg 함수
가 이전에 선언한 avg 함수
의 동작을 실행한다.avg 함수
는 새롭게 정의한 new_func 함수
의 동작을 실행한다.
여기서 old_avg 함수
의 정보들을 살펴보자.
>>> old_avg.__name__
'avg'
>>> help(old_avg)
Help on function avg in module __main__:
avg(a_list)
리스트 항목들의 평균값 반환
old_avg의 이름으로 최초에 정의된 이름인 avg
를 출력한다는 걸 알 수 있다.
4.8 가변 길이 인수 리스트
1) *args
리스트
*args
문법은 모든 길이의 인수 리스트에 접근하는데 사용된다.
- 형식
def 함수이름([일반 인수,] *args) :
문장
예시를 살펴보자.
def my_var_func(*args) :
print('The number of args : ', len(args))
for item in args :
print(item)
>>> my_var_func(10, 20, 30, 40)
The number of args : 4
10
20
30
40
위와 같이 모든 길이의 인수 리스트를 매개변수로 받을 수 있다.
특징이 있다면 인수에 대괄호 기호를 사용할 필요가 없다는 것이다.
일반 인수
에 대해서 얘기해보면 *args
에 포함되지 않는 추가 인수는 반드시 *args
앞에 위치하거나 키워드 인수여야 한다.
ex) 평균 계산 함수
>>> def avg(units, *args) :
print(sum(args) / len(args), units)
>>> avg('inches', 11, 22, 33, 55) # 일반 인수 units가 *args보다 앞에 위치했기 때문에 유효하다
30.25 inches
- Note
*
기호는 파이썬에서 여러 가지 용도로 사용된다.*
기호의 기본적인 사용법은 unpacked list
이다. 리스트를 분리해서 항목들을 나열하는 것으로 교체하는 역할을 한다.
ex)
>>> ls = [1, 2, 3, 4]
>>> print(ls)
[1, 2, 3, 4]
>>> print(*ls) # 리스트인 ls 앞에 *를 붙여줌으로써 언팩된 것을 확인할 수 있음
1 2 3 4
또한 *
를 제거함으로써 표준 파이썬 리스트로 패킹(packing)하는 동작도 실행할 수 있다.
2) **kwargs
리스트
키워드 인수를 지원하는 조금 더 복잡한 문법은 함수 호출 시 매개변수의 이름을 각각 지정하는 것이다.
ex) print(10, 20, 30, end = '.', sep = ',') # end, sep 매개변수의 이름을 직접 지정함
- 형식
def 함수이름([일반 인수, ] *args, **kwargs) :
문장
함수 정의 안에서 kwargs
는 키-값 쌍으로 구성된 딕셔너리 형태의 인수를 의미한다.
key = 매개변수의 이름 / value = 매개변수에 전달된 값
def pr_named_vals(**kwargs) :
for k in kwargs :
print(k, ":", kwargs[k])
>>> pr_named_vals(a = 10, b = 20, c = 30)
# 아래와 같이 key값은 a, b, c / values는 10, 20, 30
a : 10
b : 20
c : 30
- 또 다른 예시
def pr_vals_2(*args, **kwargs) :
for i in args :
print(i)
for k in kwargs :
print(k, ":", kwargs[k])
>>> pr_vals_2(1, 2, -3, -11, a = 100, b = 2000)
1
2
-3
-11
a : 100
b : 2000
'Python' 카테고리의 다른 글
[파이썬 코드 업] 9-1장. 클래스와 매직 메서드 (0) | 2023.05.06 |
---|---|
[파이썬 코드 업] 4-3장. 데코레이터 (0) | 2023.05.06 |
[파이썬 코드 업] 4-1장. 프로그래밍 지름길 (0) | 2023.05.05 |
[파이썬 스킬 업] 3장. 리스트 기능 (0) | 2023.04.27 |
[파이썬 스킬 업] 2장. 문자열 기능 (0) | 2023.04.25 |