프로그래밍 언어/Python

파이썬 Python 실습 :: 기본적인 함수 사용 정리 함수

gamjadori 2024. 1. 11. 10:11
728x90

<함수 사용>

  • 함수: 특정 용도의 코드를 한곳에 모아놓은 것
  • 처음에 한번만 작성해 놓으면 나중에 필요할 때 계속 불러 쓸 수 있음
  • 장점: 코드의 용도 구분 가능 / 코드 재사용 가능 / 실수 감소
  • 형식
def 함수이름():
	    코드 내용
# 함수 선언 // 함수를 먼저 선언해야 호출 가능
>> 함수 선언이 뒤에 오면 에러 발생
>>> def hello():
	    print('Hello world!')

# 함수 호출(사용)
>>> hello()
Hello world!

 

<매개변수(파라미터), 인자(아규먼트)>

  • 매개변수(parameter): 함수 안에서의 정의 및 사용에 나열되어 있는 변수 (선언 시 사용)
  • 인자(argument): 함수를 호출할 때 전달되는 실제 값을 의미 (호출 시 사용)
  • 매개변수가 있는 함수는 함수 호출 시, 꼭 인자를 지정해야 함
>>> def add(a,b): // a, b: 매개변수
    print(a + b) // a + b: 매개변수
>>> add(10, 20) // 10, 20: 인자
30
>>> a, b = 10, 20
>>> add(a, b)
30

 

<함수 종료, 결과 반환 return>

** 결과를 돌려주는 함수 return
>>> def add(a, b):
	    return a + b
>>> x = add(10, 20)
>>> print(x)
** return: 함수가 호출될 때 생성된 출력 또는 결과
					함수를 종료 시켜주는 역할을 수행

** 여러 개의 결과를 돌려주는 함수 return
>>> def add_sub(a, b):
    return a + b, a - b
>>> x = add_sub(10, 20)
>>> print(type(x), x, x[0], x[1])
// x[0]는 함수 결과의 첫번째, x[1]는 함수 결과의 두번째 >> x= 30, -10
<class 'tuple'> (30, -10) 30 -10

>>> def mul(a, b):
	    c = a * b
	    return c
>>> def add(a, b):
	    c = a + b
	    **print(c) >> 30**
	    d = mul(a, b) mul (10, 20) > 10 * 20 = 200 >> **d = 200**
	    print(d) **>> 200**
>>> x = 10
>>> y = 20
>>> add(x, y)
30
200

 

<함수에서 파라미터 전달>

>>> print(10, 20, 30, 40, 50, 60, 70)
>>> def print_t(a, b, c):
	    print(a, end=' ')
	    print(b, end=' ')
	    print(c, end=' ')
>>> print_t(10, 20, 30)
10, 20, 30

>>> x = [10, 20, 30]
>>> print_t(*x) // *x = x의 요소를 불러와라
10 20 30
>>> print_t(x)
Traceback (most recent call last):
  File "<pyshell#65>", line 1, in <module>
    print_t(x)
TypeError: print_t() missing 2 required positional arguments: 'b' and 'c' >> 오류 발생

>>> print_t(*[1, 2, 3])
1 2 3
>> 언패킹 작용으로 파라미터 a, b, c로 분해돼서 전달

*: 괄호 안에 있던 데이터들을 풀어 각각으로 만드는 언패킹 역할

 

<*arg>

  • *args: 가변 인자를 처리하는 표현으로 들어오는 인자의 개수를 모른다거나, 그 어떤 인자라도 모두 받아서 처리를 해야 할 때 주로 사용 위치에 따라 정해지는 인자
>>> def print_member(*args):
	    for i, arg in enumerate(args): // enumerate(): 인덱스 기준으로 순서 부여
	        print(i)
	        print(arg, end=' ')
>>> print_member('a')
0
a
>>> print_member('a', 'b', 'c')
0
a 1
b 2
c
>>> print_member('a', 'b', 'c', 'd', 'e', 'f')
0
a 1
b 2
c 3
d 4
e 5
f
>>> y = ['a', 'b', 'c', 'd', 'e', 'f']
>>> print_member(y)
0
['a', 'b', 'c', 'd', 'e', 'f']
>> []를 통째로 넘겼음 (언패킹 안 함)
>>> print_member(*y)
0
a 1
b 2
c 3
d 4
e 5
f
>> [] 안에 있는 요소를 하나씩 넘겼음 (언패킹 시행)

>>> def add(a, b, *args): // 기본형 a와 b를 먼저 써야 함
	    print(a + b)
	    for arg in args:
	        print(args, end=' ')

>>> def personal_info(name, age, address, phone):
	       print('이름:', name)
        print('나이:', age)
        print('주소:', address)
        print('핸드폰:', phone)
>>> personal_info('홍길동', '30', '서울', '010-1234-1234')
이름: 홍길동
나이: 30
주소: 서울
핸드폰: 010-1234-1234

>>> def personal_info(*args):
	    for i, val in enumerate(args):
	        if i == 0:
	            print('이름:', val) // 값: val
	        elif i == 1:
	            print('나이:', val)
	        elif i == 2:
	            print('주소:', val)
	        else:
	            print('핸드폰:', val)
>>> personal_info('홍길동', '30', '서울', '010-1234-1234')
이름: 홍길동
나이: 30
주소: 서울
핸드폰: 010-1234-1234

>>> def personal_info(name='홍길동', age= 26, address='서울', phone='010-1234-1234'):
	    print('이름:', name)
	    print('나이:', age)
	    print('주소:', address)
	    print('핸드폰:', phone) >> 항상 고정적으로 나오는 값을 미리 지정
>>> personal_info('김길동')
이름: 김길동
나이: 26
주소: 서울
핸드폰: 010-1234-1234

>>> y = {'name':'홍길동', 'age': 20, 'addess': '서울', 'phone': '010-1234-1234'}
>>> personal_info(*y)
이름: name
나이: age
주소: addess
핸드폰: phone
>> 언패킹을 한 번만 해서 키가 넘어 감
>>> personal_info(**y)
이름: 홍길동
나이: 20
주소: 서울
핸드폰: 010-1234-1234

 

<**kwargs>

  • **kwargs: 딕셔너리 형태로 함수를 호출
>>> def abb(**kwargs):
	    print(type(kwargs))
	    print(kwargs.items()) // 키와 값 모두 가져오기
	    print(kwargs.keys()) // 키만 가져오기
	    print(kwargs.values()) // 값만 가져오기
>>> abb(**{'a': 1, 'b':2, 'c':3})
<class 'dict'> // **kwargs는 딕셔너리 타입
dict_items([('a', 1), ('b', 2), ('c', 3)])
dict_keys(['a', 'b', 'c'])
dict_values([1, 2, 3])

>>> abb(name='홍길동', age=26)
<class 'dict'>
dict_items([('name', '홍길동'), ('age', 26)])
dict_keys(['name', 'age'])
dict_values(['홍길동', 26])

 

<변수의 범위>

  • 전역범수: 함수 밖에서 만들어진 변수
>>> x = 10 // 전역변수
>>> def foo():
	    print(x)
>>> foo()
>>> print(x)
10
10
  • 지역변수(로컬변수): 함수 안에서 만들어진 변수
>>> def bar():
	    x = 20 // 지역변수
	    print(x)
>>> bar()
20

 

<전역변수 가져오기> global

>>> x = 10
>>> def foo():
	    global x // 전역변수를 함수에서 사용하겠다고 선언
	    x = 20   // 전역변수 x에 값을 대입
	    print(x) // 전역변수 x를 출력
>>> foo()
>>> print(x)
20
20