[Zerobase][Python Mid] 함수

솔비·2023년 11월 27일
1

💻 Python. w/zerobase

목록 보기
6/33
post-thumbnail

파이썬중급 [함수]

1. 함수란(=기능)

파이썬에서 함수란 수학적 의미와 동일하다.

input -> [함수] -> output

📢 특정기능을 재사용하기위해 사용한다.
변수를 사용하는 이유(재사용)와 동일하다.

A. 내장함수

파이썬에서 기본으로 제공하는 함수
e.g.
input() / sort() / reverse() / clear() 등등

B. 사용자함수

사용자가 직접 선언하는 함수


2. 함수 선언과 호출

def 함수선언

def 함수명 () :		#선언구
	실행구
함수명()				#호출구

📢 함수명은 소문자로, 특수문자는 올 수 없다.
변수는 대부분 명사로, 함수는 동사로 쓴다.
📢 데이터를 받고자한다면 ()안에 매개변수를 넣어주면 된다.

#예시1

def add () :
    n1 = int(input('n1 입력 : '))
    n2 = int(input('n2 입력 : '))
    
    print(f'n1 + n2 = {n1+n2}')
    
add()

📢 def 이후는 함수가 선언만 되어있으므로 사용하려면 add()로 함수 호출을 해주어야 한다.

#예시2

def add_fun (x,y) :
    return x + y		#return 반환한다

print(add_fun(1,2))		
#실행구에서 print하지 않았으므로 호출구에서 print

💡return이란?

1. 함수 실행 결과를 호출부로 반환 할 수 있다.

즉, return으로 반환하는 값은 반환값이라고 하며 함수를 호출해준 바깥에 결과를 알려주기 위해 사용

2. 함수 중간에 빠져나오는 기능이 있다.(실행을 종료한다.)

return뒤에 print를 넣어도 출력되지 않는다.
이것을 dead code라고 한다.

def add_fun (x,y) :
    return x + y
    print('여기엔 뭘 넣어도 출력되지 않지롱')
print(add_fun(1,2))		#3

💡return과 print의 차이점

위의 예시1( 함수내에 print/return값 없음)와
예시2 (함수 내에서 return으로 호출부로 실행결과 반환 / 호출부에서 print) 모두
콘솔창의 찍히는 숫자가 같다고 하더라도,
그 의미는 엄연히 다르다.
return은 그 함수의 리턴값(반환값)이 된다.
그 함수자체를 대신한다고 말할 수도 있다.

add_fun(1,3) = 4

❗return은 그 자체로는 값 출력이 불가하나 지정한 함수에 값을 지정해준다.

반면,
print()는 리턴값과 관계없이
단순히 화면에 출력해주는 것일 뿐이다.
함수 실행 시 값이 출력되긴 하지만, 단순히 함수 내 print()구문이 출력되었을 뿐이고 함수의 리턴값은 None이다.

❗print는 단순한 출력용도로 함수에 값 지정이 불가하다.

B. lambda

def 보다 간단하게 함수선언 가능

함수명 = lambda 매개변수 : 출력값
#def 사용시

def calculator (n1,n2) :
    return n1+n2
print(calculator(1,2))
#lambda사용시

calculator = lambda n1,n2 : n1+n2
print(calculator2(1,2))

C. 함수안의 함수호출

실행구에 또 다른 함수 삽입
순서대로 실행된다.

#구구단함수

def gugudan2() :		#2
    for i in range (1,10) :
        print('2 * {} = {} '.format(i,(2*i)))
    gugudan3()			#2실행시 같이 실행

def gugudan3() :		#3
    for i in range(1, 10):
        print('3 * {} = {} '.format(i, (3 * i)))

gugudan2()				#1		

gugudan2 함수안에 gugudan3 출력이 중첩되어있으므로 gugudan3까지 실행된다.


3. 인수와 매개변수

함수 호출 시 함수에 데이터를 전달할 수 있다.

def greet (매개변수) :
    print(f'{매개변수} 고객님 안녕하세요')
    #or
    return 매개변수 + ' 고객님 안녕하세요.'
greet(인수)
#or
print(greet('인수'))
# print예시

def greet(customer) :
    print(f'{customer} 고객님 안녕하세요')

greet('홍길동')		
#홍길동 고객님 안녕하세요
#return예시

def greet(customer) :
    return customer + ' 고객님 안녕하세요'

print(greet('홍길동'))		
#홍길동 고객님 안녕하세요

📢 매개변수와 인수의 개수는 동일해야한다.
📢 매개변수가 정해지지 않은 경우 *(튜플)를 사용한다.
예시 ↓

#국어, 영어, 수학 점수를 입력받고, 입력받은 점수를 이용해서 총점과 평균을 출력하는 함수를 만들어보자

def print_score(*scores) :
    sum=0
    for score in scores :
        sum += score

    avg = sum / len(scores)
    return sum , avg

kor = int(input('국어 점수 입력 : '))
eng = int(input('영어 점수 입력 : '))
math = int(input('수학 점수 입력 : '))

sum,avg = print_score(kor,eng,math)
print('총점 : {}'.format(sum))
print('평균 : {}'.format(round(avg,2)))

4. 전역변수와 지역변수

전역변수

함수밖에 선언된 변수

📢 어디서나 사용가능하지만 함수 안에서는 수정할 수 없다.

지역변수

함수 안에 선언된 변수로 함수 안에서만 사용 가능하다.

num_out = 10				# 전역변수
def print_num () :
    num_out = 20			#지역변수
    print(num_out)

print_num()					#함수안의 지역변수 값 #20
print(num_out)				#전역변수 값 #10

📢 지역변수를 함수밖에서 print 하면 함수가 정의되어있지 않으므로 error

🌟 global 키워드

global을 사용하면
함수안에서도 전역변수 값을 수정할 수 있다.

num_out = 10				
def print_number () :
    global num_out			#함수안의 num_out과 함수 밖의 num_out이 같은게 됨
    num_out = 20			#전역변수 10을 20으로 초기화 (=지역변수)
    print(num_out)			#지역변수

print_number()				#함수안의 지역변수 값 #20
print(num_out)				#함수밖에 지역변수를 global로 초기화한 값 #20

📁 실습

#사용자가 가로, 세로 길이를 입력하면 삼각형과 사각형의 넓이를 출력하는 함수

width = int(input('가로 길이 입력 : '))
height = int(input('세로 길이 입력 : '))


def print_area ():
    global width
    global height

    triangle = width * height / 2
    square = width * height

    return triangle,square

triangle, square = print_area()

print('삼각형의 넓이 : {}'.format(triangle))
print('사각형의 넓이 : {}'.format(square))

5. 중첩함수와 재귀함수

A. 중첩함수

함수안에 또 다른 함수가 있는 형태

  1. 내부함수는 함수 밖에서 호출 할 수 없다.
  2. 자기가 속한 원래 함수의 매개변수를 받아서 사용할 수 있다.
#중첩함수를 이용한 calculator 함수

def calculator(n1,n2,operator) :

    def add() :
        return n1+n2

    def sub():
        return n1-n2

    def mul():
        return n1*n2

    def div():
        return round(n1/n2,2)

    if operator == 1:
        print(add())
    elif operator == 2:
        print(sub())
    elif operator == 3:
        print(mul())
    elif operator == 4:
        print(div())


while True :
    n1 = int(input('n1 입력 : '))
    n2 = int(input('n2 입력 : '))
    operator = int(input('1.덧셈, 2.뺄셈, 3.곱셈 4.나눗셈 5.종료 : '))

    if operator == 5 :
        break

    calculator(n1,n2,operator)

B. 재귀함수

함수 안에 자기자신을 호출하는 함수

def factorial(n):     

	if n == 0 or n == 1:         
    	return 1  # Base case     
    else:         
    	return n * factorial(n - 1)  # Recursive call 
   	
result = factorial(5) 
print(result)  # Output: 120

제로베이스 데이터분석스쿨
Daily Study Note
profile
Study Log

0개의 댓글