python - (1) 함수 function

jun hyeon·2023년 8월 7일

python

목록 보기
14/21
post-thumbnail

자료 참조는 제로베이스

함수

  • 쓰는 이유 : 함수는 특정 기능을 재사용하기 위해서 사용한다. =>반복적 사용을 위함.
  • 종류 : 내장 함수, 사용자 함수로 나뉜다.
    • 내장 함수 : print() input() numbers.sort() 등.
    • 사용자 함수 : 사용자가 임의로 지정하는 함수.

▶함수 선언

' def ' , ' 함수명() ' , ' : '
' 들여쓰기 ' , ' 실행부 '
형태로 선언한다.

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

▶함수 호출

' 함수명() ' 형태로 호출한다.

add()

▶ 함수 내 또 다른 함수 호출

함수 내에서 다른 함수를 호출할 수도 있다.

def guguDan2():
    for i in range(1, 10):
        print('2 * {} = {}'.format(i, 2 * i))
    guguDan3()
def guguDan3():
    for i in range(1, 10):
        print('3 * {} = {}'.format(i, 3 * i))
    guguDan4()
def guguDan4():
    for i in range(1, 10):
        print('4 * {} = {}'.format(i, 4 * i))
        
guguDan2()
#출력
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36

▶ 함수 호출 시, 인수(args)와 매개변수(param)

함수를 호출할 때 데이터를 넣어서 호출할 수도 있다.

  • 매개변수 : 인수를 받을 변수형태(변수의 일종)
  • 인수 : 함수에 들어가는 데이터
def greet(customer):
    print(f'{customer} Hi~')

greet('Hong')
#출력
Hong Hi~

그 때, 인수와 매개변수의 개수는 일치해야 한다.

def cal(n1, n2):
    print(f'{n1} + {n2} = {n1 + n2}')
    print(f'{n1} - {n2} = {n1 - n2}')
    print(f'{n1} * {n2} = {n1 * n2}')
    print(f'{n1} / {n2} = {n1 / n2}')

cal(10,20)
#출력
10 + 20 = 30
10 - 20 = -10
10 * 20 = 200
10 / 20 = 0.5

매개변수의 개수가 정해지지 않은 경우 *를 이용할 수 있다.

def printNumber(*numbers): #*numbers 의 타입은 튜플이다.
    for number in numbers:
        print(number, end='')
    print()

printNumber(10, 20)
printNumber(10, 20, 30, 40)
#출력
1020
10203040

▶ 함수 실행 결과 반환

return 키워드를 이용하여 함수 실행 결과 값을 호출부로 반환할 수 있다.

def cal(n1,n2):
    result = n1 + n2
    return result

returnValue = cal(20,10)
print(returnValue)
print(cal(10,10))
#출력
30
20

▶ 전역변수, 지역변수

  • 전역변수 : 함수 밖에 선얻된 변수로 어디서나 사용가능 하지만, 함수 안에서 수정할 수는 없다.
  • 지역변수 : 함수 안에 선언된 변수로 함수 안에서만 사용 가능하다.
num_out = 10 #전역변수
def printNumber():
	num_out = 20
    print(f'num-out : {num_out}') # 20
    
printNumber()
print(f'num-out : {num_out}') # 10 -> 수정되지 않았음.
#출력
num-out : 20
num-out : 10
def printNum():
    num_in = 20
    print(f'num_in : {num_in}')

print(f'num_in : {num_in}') #함수 밖에서 사용 불가
#출력
NameError: name 'num_in' is not defined
  • global 키워드
    global을 사용하면 함수 안에서도 전역변수의 값을 수정할 수 있다.
def printNumber():
    global num_out
    num_out = 20
    print(f'num-out : {num_out}') # 20

printNumber()
print(f'num-out : {num_out}') # 20 -> 값이 수정됨.
#출력
num-out : 20
num-out : 20

▶ 중첩함수

함수안에 또 다른 함수를 선언할 수도 있다. 내부 함수를 함수 밖에서 호출할 수 없다.

def out_function():
    print('out function called!')

    def in_function(): #out_function()에 귀속되어 있는 중첩함수
        print('in function called!')

    in_function()

out_function()
#출력
out function called!
in function called!
def out_function():
    print('out function called!')

    def in_function(): #out_function()에 귀속되어 있는 중첩함수
        print('in function called!')

    in_function()

in_function() # 내부의 함수를 함수 밖에서 호출
#출력
NameError : name 'in_function' is not defined

▶ lambda 함수

lambda 키워드를 이용하면 함수 선언을 보다 간다하게 할 수 있다.

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

returnValue = cal(10, 20)
print(f'returnValue : {returnValue}')

# ↓↓ lambda 형식으로 바꾸면? ↓↓
cal = lambda a, b: a + b
returnValue = cal(10, 20)
print(f'returnValue : {returnValue}')
#출력
returnValue : 30
returnValue : 30

__name__ 전역 변수

__name__ 에는 모듈 이름 또는 __main__ 이 저장된다.
예로 'addModule.py'이 실행(메인)파일 일 때는 __name__ 에 ' __main__ ' 이 저장되고, 다른 곳에서 호출되면 ' addModule '이 저장된다.

0개의 댓글