Chapter 08. 함수

이성욱·2024년 5월 20일

함수

함수의 정의

함수는 파이썬 프로그램 자체에서 제공하지만, 사용자가 직접 만들어서 사용하기도 함.
함수(function)는 특정 작업을 수행하는 명령어들의 모음에 이름을 붙인 것.

함수의 두가지 요소

  • 함수의 구현(정의) - 행동 정의
  • 함수의 호출 - 사용

내장 함수

print()
input()
abs()
...

함수를 수행시키려면 함수를 호출(call)하면 된다.

사용자 정의 함수

사용자(프로그래머)가 함수의 정의부를 만들어 사용하는 함수

함수의 동작 방식

함수의 필요성

  • 유사 코드의 재활용
  • 작은 단위로 작업을 나눌 수 있음
  • 코드 구성의 간결성

함수를 이용한 프로그래밍 (사용자 정의 함수)

함수를 작성한다는 의미: 이 함수가 어떻게 동작하는 지를 정의하는 부분

함수를 호출함으로써 정의된 부분을 실행

함수가 값을 반환

  • 반환값(return value)은 함수가 호출한 곳으로 반환하는 작업의 결과값이다.

  • 함수를 호출한 곳으로 값을 반환

    • return 명령어 사용
      사용법: return 반환할 값(변수)
  • 시작부터 끝까지의 합을 구하는 프로그램

def get_sum(start, end):
	sum = 0
    for i in range(start, end+1):
    	sum += i
    return sum

value = get_sum(1,10)
print(value)

## 55

두 정수의 합을 반환하는 함수 동작 방식

함수 정의부의 위치

파이썬 인터프리터는 함수가 정의되면 함수 안의 문장들은 즉시 실행하지 않고 위치만 기억한다.

인수와 매개변수

  • 인수(argument)는 호출 프로그램에 의하여 함수에 실제로 전달되는 값이다.
  • 매개 변수(parameter)는 이 값을 전달받는 변수이다.

디폴트 인수

파이썬에서는 함수의 매개변수가 기본값을 가질 수 있다. 이것을 디폴트 인수(difault argument)라고 한다.

def greet(name, msg="별일없죠?"):
	print("안녕 ",name + ',' + msg)
greet("영희")

## 안녕  영희, 별일없죠?

print()

def print(........, end="\n",.........): ## end="\n"이 디폴트 값으로 저장되어 있었던 것이다.

print("Hello", end="") ## end 값을 ""로 바꿔주니까 줄이 바뀌지 않고 출력되는 것이다.

가변 매개 변수

매개변수의 ㄱ숫자를 정해 놓지 않는 방법

  • 가변 매개변수(Arbitrary Argument List) 방식

함수에서의 변수

전역변수

프로그램 전 영역에서 사용 가능한 변수 (지금까지 사용한 변수)

지역변수

함수내에서만 사용하는 변수 (매개변수 포함)

  • 함수 종료 시 삭제

global 명령어 사용

무명함수와 모듈처리

무명함수

무명 함수는 이름은 없고 몸체만 있는 함수이다. 파이썬에서 무명 함수는 lambda 키워드로 만들어진다.

모듈의 이해

많이 사용하는 함수를 만들어 놓고, 프로그램에서 해당 함수를 사용할 때 함수를 import하여 사용하면 편리함



function

def abcd(num1, num2):
    print("function test", num1, num2)

print("start")
abcd(5,20)
abcd(10,100)
abcd(12,300)
abcd("Hello","Hi")
print("end")

#####################################################

def add(num1, num2):
    result = num1 + num2
    return result

value = add(5,6)
print(value)
value = add(956,272)
print(value)
print(add(10,20))

#######################################################

def get_sum(start, end):
    hap = 0
    for i in range(start, end+1):
        hap += i
    return hap

v = get_sum(1,100)
print("1~100까지 합=",v)
v = get_sum(1,1000)
print("1~1000까지 합=",v)
print("56~990까지 합=",get_sum(56,990))

########################################################

def abcd(x,y,z):
    result = x+y+z
    print("%d+%d+%d=%d"%(x,y,z,result))
    return result

abcd(5,6,7)

def abcd(x,y,z=1):
    result = x+y+z
    print("%d+%d+%d=%d"%(x,y,z,result))
    return result

abcd(5,6) ## z값은 default로 1로 계산된다. -> 5+6+1=12


def abcd(x=1,y=1,z=1):
    result = x+y+z
    print("%d+%d+%d=%d"%(x,y,z,result))
    return result

abcd() ## 1+1+1=3

def efg(x=1,y=1,z=1):
    result=x*y*z
    print("%d*%d*%d=%d"%(x,y,z,result))

efg(5,6,7)
efg(z=10,x=2,y=3)
efg(y=5)

##########################################################

def abcd(*num):
    print(num)
    for x in num:
        print(x, end=" ")
    print()

abcd(10)
abcd(10,20)

#########################################################

def abcd(num):
    a=num*num
    return a

num=int(input("number. "))
print(abcd(num))
print(a) # -> a는 지역변수이기 때문에 오류 뜬다.

##########################################################

def sub():
    global s
    s = "I like banana" # 지역 변수
    print(s)

s = "I like apple" # 전역 변수
print(s)
sub()
print(s)

############################################################

def a():
    global s # 함수 a는 s변수를 전역변수
    s = "I like banana"
    print(s)

a()
s = "I like apple"
a()


##############################################

def a():
    print("이함수는 a함수입니다")
    
def b():
    print("이함수는 b함수입니다")

def c():
    print("이함수는 c함수입니다")

function_2

import function

print("모듈 테스트")
function.a()
function.b()
function.c()

8ex1

def get_Max(x, y):
    if x > y:
        return x
    else:
        return y



num1 = float(input("첫번째 실수. "))
num2 = float(input("두번째 실수. "))
print(num1, "와",num2,"중 더 큰 수는",get_Max(num1,num2),"입니다.")

8ex2

def is_prime(n):
    if n<2:
        return False
    for i in range(2,n):
        if n%i==0:
            return False
    return True


a = int(input("Number. "))
if is_prime(a):
    print("%d is prime."%a)
else:
    print("%d is not prime."%a)

8ex3

def is_prime(n):
    if n<2:
        return False
    for i in range(2,n):
        if n%i==0:
            return False
    return True

def get_prime_number(a):
    count = 0
    num = 2
    while count<a:
        if is_prime(num):
            print(num,end=" ")
            count+=1
        num+=1
    print()

n = int(input("How many primes? "))
get_prime_number(n)

8ex4

def getAddAverage(n):
    global total
    total+=n
    avg = total/count
    return avg
    
total,count = 0,0
while True:
    n = int(input("정수 입력(0은 종료). "))
    if n==0:
        break
    count+=1
    print("평균 =",getAddAverage(n))
print("총합 =",total,"평균 =",getAddAverage(n)) 

0개의 댓글