Language/Python

Python - 함수

괘창 2024. 5. 2. 22:05

● 함수

- 파이썬의 함수 구조
def 함수명(매개변수) :
   수행문1
   수행문2
   ...

 

예시)


- 함수 형태

https://wikidocs.net/24 참조

함수는 들어온 입력값을 받은 후 어떤 처리를 하여 적절한 값을 리턴한다.
입력값과 리턴값의 존재 유무에 따라 4가지 형태의 함수가 존재한다.

 

1. 일반적인 함수 : 입력값, 리턴값 둘다 존재

리턴값이 있는 함수는 저장할 변수가 필요하다.
def 함수이름(매개변수):
   <수행문>
   ...
   return 리턴값

 

예시)


2. 입력값이 없는 함수

리턴값이 있는 함수는 저장할 변수가 필요하다.

 

예시)

** 리턴값을 받을 변수 = 함수명() == a = say()


3. 리턴값이 없는 함수

저장할 변수가 없다.

 

예시)

** return값은 오직 return명령어로만 돌려받을 수 있기 때문에 a에는 리턴값이 없다.


4. 입력값, 리턴값이 없는 함수

 

예시)

** 함수이름 say()를 통해서만 호출이 가능하다.


- 매개변수 지정하여 호출하기

 

예시)

** 매개변수를 지정하면 순서에 상관없이 사용할 수 있다.


- 입력값이 몇 개가 될지 알 수 없을 때

def 함수이름(*매개변수):
   <수행문>
   return문

* 매개변수가 아닌  *매개변수를 받는다.

 

예시)

 

** add_many함수는 입력값이 몇 개이든 상관없다.

** *args 처럼 매개변수 이름 앞에 * 를 붙이면 입력값을 전부 모아 튜플로 만들어준다.

** *args는 임의로 정한 변수명으로 *python, *sample 처럼 아무 이름을 붙여도 된다.


예시 2)

** *args 매개변수 앞에 choice 매개변수가 추가되어 있다.


- 키워드 매개변수 (kwargs)

키워드 매개변수를 사용하기 위해선  매개변수 앞에 별 2개(**)를 붙인다.

 

 

예시)

** **kwargs매개변수 이름 앞에 **을 붙이면 매개변수 kwags는 딕셔너리가 되고

    key=value 형태의 입력값이 딕셔너리에 저장된다.

 


- 함수의 리턴값은 언제나 하나이다.

 

예시)

** 리턴값이 하나이기 때문에 리턴값 a+b, a*b는 튜플값 하나인 (a+b, a*b)로 리턴

** 튜플값을 분리하고 싶은 경우 각각의 함수를 주어 호출하면 된다.


- return문이 하는 역할?

1. 값을 돌려주는 역할
2. 함수를 종료시키는 역할

 

예시)

** 함수의 리턴값은 언제나 하나이기 때문에 return a*b는 실행되지 않는다. 단, 오류는 발생하지 않는다.


예시 2)

** 특별한 상황에 함수를 빠져나가고 싶은 경우 return을 단독으로 사용하여 함수를 빠져나갈 수 있다.

** '천재' 값이 들어오면 문자열 출력 없이 함수 종료


- 매개변수 초기값 미리 설정하기

 

예시)

** 매개변수는 (name, age, man=True) 로 초기값 미리 설정한 것으로 미대입 시 man=True의 초기값을 가진다.

** (name, man=True, age)는 사용 불가하며, 디폴트를 적용하는 매개변수는 맨 뒤에 놓아야 한다.

ㄴ say_myself("홍길동",36) # 두번째 인자 값 36이 어디에 대입될지 파이썬 인터프리터가 알 수 없다.


- 함수 안에서 선언한 변수의 효력 범위

 

예시)

함수 안에서 사용하는 매개변수는 함수 밖의 변수 이름과는 전혀 상관없다.


- 함수 안에서 함수 밖의 변수를 변경하는 방법

global 명령어

 

예시)

 

** global a는 함수 안에서 함수 밖의 a 변수를 사용하는 뜻이나

함수는 독립적으로 존재하는 것이 좋기 때문에 외부 변수에 종속적인 함수는 좋은 함수가 아니니 참고!


- lambda (람다)

lambda로 선언된 내용은 결론적으로 함수와 동일한 역할을 한다.
함수를 간결하게 만들 때 사용한다.

 

- lambda 사용방법
함수명 = lambda 매개변수1, 매개변수2, ..: 매개변수를 이용한 표현식

 

기존 함수 예시)

 


lambda 예시)

** lambda로 만든 함수는 return 명령어가 없어도 결과값을 리턴한다.

** 기존 def 함수와 값이 동일하다.