파이썬 기초 3-1. 함수

MANBOKWAK·2024년 1월 11일

파이썬 기초

목록 보기
6/15

함수

함수란?

  • 입력값을 가지고 어떤 일을 수행한 다음에 그 결과물을 내어놓는 것

1. 함수를 사용하는 이유

  • 프로그래밍을 하다보면 똑같은 내용을 반복해서 작성하는 경우가 많음 -> 함수로 해결가능

  • 반복되는 부분이 있는 경우 그 부분을 한뭉치로 묶어서 입력값을 주었을때 결과값을 돌려주는 함수에 넣어서 이용하면 효율적이고 간편해짐

  • 프로그램을 함수화 하면 프로그램의 흐름을 일목요연하게 볼 수 있음

  • 오류가 어디서 발생하는지도 비교적 손쉽게 찾을 수 있음

2. 파이썬 함수의 구조

def 함수이름(매개변수,...):
	수행할 문장1
    수행할 문장2
    ...
  • 위와 같은 형식으로 함수를 선언할 수 있음

  • 매개변수는 이함수에 입력으로 전달되는 값을 받는 변수

def add(a,b):
	return a + b
    
a = 3
b = 4
print(add(3,4)) # 7
  • 위 예제에서 함수의 이름은 add이고, 입력으로 2개의 값을 받고, 결과값은 2개의 입력값을 더한값이다

  • return은 함수의 결과값을 돌려주는 명령어


3. 매개변수와 인수

매개변수

  • 함수에 입력으로 전달된 값을 받는 변수를 의미

인수

  • 함수를 호출할때 전달하는 입력값을 의미
# 매개변수와 인수 Example
def add(a,b):   # --> a,b가 매개변수
	return a + b
    
print(add(3,4)) # --> 3,4가 인수

4. 입력값과 결과값에 따른 함수의 형태

  • 함수는 들어온 입력값을 받아 어떤 처리를 하여 결과값을 돌려줌

  • 함수의 형태는 입력값과 결과값의 존재 유무에 따라 4가지 유형으로 나뉨

일반적인 함수

  • 입력값이 있고 결과값이 있는 함수
# 일반적인 함수의 형태
def 함수 이름(매개변수):
	수행할 문장
    ...
    
    return 결과값
# 일반적인 함수 Example
def add(a,b):
	result = a + b
    return result

a = add(3,4)
print(a)

입력값이 없는 함수

  • 매개변수가 없는 함수
def say():
	return 'Hi'
    
a = say()
print(say())
  • say()처럼 매개변수를 입력하지 않고 함수를 호출할 수 있음

결과값이 없는 함수

  • 결과값이 없는 함수로 return이 없음
def add(a,b):
	print('%d, %d의 합은 %d입니다'%(a,b,a+b))

add(3,4)
# 3, 4의 합은 7입니다.

a = add(3,4)
print(a) # None --> 결과값이 없음
  • print문은 단지 수행할 문장에 속할뿐 결과 값이 아님

입력값도 결과값도 없는 함수

def say():
	print('Hi')
    
 say()
 # Hi
  • say() 처럼 함수 이름으로만 호출해도 함수가 실행

5. 매개변수 지정하여 호출하기

  • 함수를 호출할 때 매개변수를 지정할 수도 있음

  • 함수 호출 시 바로 값을 대입해주면됨

def add(a,b):
	return a + b

result = add(a = 3 , b = 4) # a는 3 b는 4 대입
print(result) # 7

6. 입력값의 개수를 특정하지 못할때

  • 함수에 들어갈 매개변수의 개수를 특정하지 못하는 경우에 파이썬에서는 이를 해결해주는 방법이 존재

  • 함수의 정의 부분에서 매개변수 부분에 '*'를 넣어주면됨

#  매개변수가 여러개일 경우 Example
def 함수이름(*매개변수):
	수행할 문장
    ...
# 입력값이 여러개인 함수 Example
def add_many(*args):
	result = 0
    for i in args:
    	result = result + i 
        return result
        
 result = add_many(1,2,3)
 print(result) # 6
 
 result = add_may(1,2,3,4,5,6,7,8,9,10)
 print(result) # 55
  • result = result + i은 *args에 입력받은 모든 값을 더하는 작업

  • *args는 입력값을 전부 모아서 튜플로 반환해서 입력값으로 넣어줌

  • args는 임의의 변수 이름으로 사용자에 맞게 변경가능

키워드 파라미터

def print_kwargs(**kwargs):
	print(kwargs)
    
print_kwargs(a=1) # {'a' : 1}

print_kwargs(name='foo', age=3) #{'age' : 3, 'name' : 'foo'}
  • 키워드 파라미터는 매개변수앞 **를 붙여서 사용할 수 있음

  • **는 매개변수를 딕셔너리형으로 반환해줌


7. 함수의 결과값은 언제나 하나

def add_and_mul(a,b):
	return a+b,a*b
    
result = add_and_mul(3,4) # result = (7, 12)

result1, result2 = add_and_mul(3,4)
  • 함수의 결과값은 항상 1개이므로 (a+b, a*b)는 튜플로 반환된다

  • result1, result2 = add_and_mul(3,4)로 결과값을 두개처럼 받을 수 있음

  • 함수는 return문을 만나는 순간 함수가 결과 값을 반환하므로 가장 먼저 만남 return문을 기준으로 함수가 종료됨


8. 매개변수에 초기값 미리 설정하기

# 매개변수에 초기값 미리 설정 Example
def say_myself(name, old, man=True):
	print("나의 이름은 %s입니다."%name)
    print("나이는 %d살입니다."%old)
    if man:
    	print("남자입니다.")
    else:
    	pritn("여자입니다.")
        
say_myself("박응용",27)
say_myself("박응용",27, True)

say_myself("박응선",27, False)
  • man=True 부분을 보면 매개변수에 미리 값을 넣어줄 수 있음

  • 함수의 매개변수에 들어갈 값이 항상 변하는 것이 아닐 경우에는 이렇게 함수의 초깃값을 미리 설정해두면 유용함

  • say_myself("박응선",27, False)의 부분에서 man 부분을 False로 바꾸기 때문에 여자입니다.가 출력

  • 함수를 def say_myself(name, man=True, old):와 같이 설정하고 say_myself('박응용',27)로 호출하면 오류가 발생함 why? ) 파이썬이 man = 27로 인식하기 때문에 오류가 발생 -> 따라서 초기화시키고 싶은 매개변수는 항상 뒤쪽에 넣어야함


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

# 함수 안에서 선언한 변수의 효력 범위 Example
a = 1
def vartest(a):
	a = a + 1
    
vartest(a)
print(a)
  • vartest함수에서 매개변수 a의 값에 1을 더했으니까 2가 출력될것으로 예상되지만 실제로는 값이 1이 나옴

  • vartest에서 사용하는 변수a는 함수안에서만 사용되는 변수이므로 함수 밖 a에는 영향을 미칠 수 없음

# 함수 안에서 선언한 변수의 효력 범위 2 Example
def vartest(a):
	a = a + 1
    
vartest(3)
print(a)
  • vartest(3)에서 a는 4가된다

  • print(a)를 하면 4가 출력되는것이 아니라 error가 발생한다

  • print(a)에서 사용하는 변수 a를 찾을 수 없기 때문에 error가 발생함

함수안에서 선언한 매개변수는 함수 안에서만 사용될뿐 함수 밖에서는 사용되지 않음에 주의!!


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

1. return 사용하기

# return 사용해서 변경하기 Example
a = 1
def vartest(a):
	a = a + 1
    return a

a = vartest(a)
print(a) # 2
  • return 문을 사용해 함수 안에서 함수 밖의 변수의 값을 변경

  • a = vartest(a)을 통해 vartest(a)의 반환값을 a에 대입함

2.global 명령어 사용하기

# return 사용해서 변경하기 Example
a = 1
def vartest():
	global a
    a = a + 1

vartest()
print(a) # 2
  • global 명령어를 사용하는 방법

  • vartest 함수 안의 global a 문장은 함수 안에서 함수 밖의 a 변수를 직접 사용하겠다는 의미

  • 함수는 독릭접으로 존재하는것이 좋기 때문에 global 명령어의 사용은 지양하는것이 좋음


11. lambda

  • lambda는 함수를 생성할 때 사용하는 예약어로 def와 동일한 역할을 수행

  • 보통 함수를 한줄로 간결하게 만들때 사용

  • def를 사용해야 할 정도로 복잡하지 않거나 def를 사용 못하는 곳에 주로 사용됨

  • lambda 매개변수1, 매개변수2, ... : 매개변수를 사용한 표현식 형태로 사용할 수 있음

add = lambda a, b : a+b
result = add(3,4)
print(result) # 7
  • add는 두개의 인수를 입력받아 더한 값을 돌려주는 lambda 함수
profile
Backend/ DevOps를 지망하는 곽희상입니다.

0개의 댓글