프로그래밍 언어/Python

[Python] 함수

eunnys 2023. 10. 26. 21:04

1. 함수

함수란?

  • 이름이 있는 코드 조각
  • 매개변수와 반환 값이 있다.
  • 정의하고 난 후 호출을 한다.
  • 내장함수와 외장함수가 있다.

 

1) 함수 정의

 

def 함수명():                    # 매개변수가 없는 함수
          [ return 코드 ]
 
def 함수명(a, b):               # 매개변수가 없는 함수
          [ return 코드 ]
 

 

2) 함수 호출

 

함수명()
결과값을 받을 변수 = 함수명(입력 인수 1, 입력 인수 2, ...)
 

 

2. 함수 (매개변수와 인수)

매개변수와 인수

  • 매개변수(parameter) : 함수에 입력으로 전달된 값을 받는 변수를 의미
  • 인수(arguments) : 함수를 호출할 때 전달하는 입력 값을 의미한다.

 

인자를 지정한 함수의 호출

  • Python은 매개변수의 수만큼 전달해줘야 하는 것이 기본이지만, 가변인자 사용도 가능
  • 매개변수에 초기값을 설정할 수 있다.

 

키워드 인자를 이용한 호출(Keyword argument)

  • 호출할 때 매개 변수명과 값을 지정하여 호출하는 방식
  • 위치 인수와 키워드 인수를 섞어서 호출할 수 있으며, 이때 위치 인수를 먼저 적고 뒤쪽에 키워드 인수를 적는다.

 

 

3. 함수 초기값 설정

초기값의 설정

  • 함수 정의부의 매개변수에 초기깂을 설정하면, 해당 매개변수의 값이 전달되지 않았을 경우 지정된 초기값으로 세팅된다.
  • 디폴트 매개변수 값은 오른쪽에서부터 채워야 한다. (즉, 기본값을 가지는 인수 뒤에 일반 인수가 올 수 없다)
# 위치 인수를 이용한 함수의 호출
def restaurant(food, drink, desert):
    return {'food':food, 'drink':drink, 'desert':desert}

first = restaurant('스테이크', '포도주', '치즈케익')
print(first)

# 키워드 인수를 이용한 함수의 호출
# 호출 시 매개변수의 이름을 함께 지정하면 순서에 상관 없이 호출 가능
second = restaurant(drink='막걸리', desert='파전', food='잔치국수')
print(second)

# default parameter: 매개변수에 초기값을 지정하는것
def restaurant(food='연어초밥', drink='사케', desert='아이스크림'):
    return {'food':food, 'drink':drink, 'desert':desert}

print(restaurant())
print(restaurant('돈부리'))
{'food': '스테이크', 'drink': '포도주', 'desert': '치즈케익'}
{'food': '잔치국수', 'drink': '막걸리', 'desert': '파전'}
{'food': '연어초밥', 'drink': '사케', 'desert': '아이스크림'}
{'food': '돈부리', 'drink': '사케', 'desert': '아이스크림'}

 

price = 1000 # 전역변수

def sales():
    price = 5000 # 지역변수
    print('함수 내 price값: ', price)

sales() # 함수 호출(사용)
print('sales() 함수 호출 후 price값: ', price)
함수 내 price값:  5000
sales() 함수 호출 후 price값:  1000

 

price = 1000 # 전역변수

def sales():
    global price # 전역변수 사용
    price = 5000 # 지역변수
    print('함수 내 price값: ', price)

sales() # 함수 호출(사용)
print('sales() 함수 호출 후 price값: ', price)
함수 내 price값:  5000
sales() 함수 호출 후 price값:  5000

 

def calcstep(begin, end, step=1):
    sum = 0
    for num in range(begin, end+1, step):
        sum += num
    return sum

print('1~10까지의 합 = ', calcstep(1,10))
print('1~10까지의 합 = ', calcstep(end=10, begin=1))
1~10까지의 합 =  55
1~10까지의 합 =  55

 


[문제] 다음과 같은 결과를 출력하는 함수를 작성하세요.

    print_star(5)
    *
    **
    ***
    ****
    *****
def print_star(num):
    for n in range(1, num+1):
        print('*' * n)
print_star(7)
output = ''

for i in range(1, 10):
    for j in range(0, i):
        output += '*'
    output += '\n'

print(output)
output = ''

for i in range(1, 10):
    output += ('*' * i)
    output += '\n'

print(output)
output = ''

for i in range(1, 15):
    for j in range(14, i, -1):
        output += ' '
    for k in range(0, 2 * i - 1):
        output += '*'
    output += '\n'

print(output)

 


[문제] 함수를 이용한 계산기
- 이항사칙연산을 매개변수로 받아 연산의 결과를 출력하는 함수를 정의하세요.
* 함수 형식: calculator(exp)
* exp: 사용자로부터 입력 받은 문자열 형태의 이항사칙 연산식
 
[예시]
계산식을 입력하세요: 10+20
10+20=30.00

계산식을 입력하세요: 10a20
연산자 오류

계산식을 입력하세요: 10/0
0으로 나눌 수 없습니다.

def calculator(exp):
    operators = {'+','-','*','/'}
    for operator in operators:
        if operator in exp:
            num1, num2 = exp.split(operator)
            num1 = int(num1)
            num2 = int(num2)
            break
    else:
        print('연산자 오류')
        return
    if operator == '+':
        result = num1 + num2
    elif operator == '-':
        result = num1 - num2
    elif operator == '*':
        result = num1 * num2
    elif operator == '/':
        if num2 == 0:
            print('0으로 나눌 수 없습니다.')
            return
        result = num1 / num2
    print(f'{num1}{operator}{num2}={result:.2f}')

exp = input('계산식을 입력하세요:')
calculator(exp)
def calculator(exp):
    operator = ''
    for op in ['+','-','*','/']:
        if op in exp:
            operator = op
            break # break와 continue는 반복문 안에서만 쓸 수 있음
    else:
        print('연산자 오류')
        return

    value1 = float(exp.split(operator)[0])
    value2 = float(exp.split(operator)[1])

    result = 0.0
    if operator == '+':
        result = value1 + value2
    elif operator == '-':
        result = value1 - value2
    elif operator == '*':
        result = value1 * value2
    elif operator == '/':
        if value2 == 0:
            print('0으로 나눌 수 없습니다.')
            return
        else:
            result = value1 / value2
    print(f'{exp}={result:.2f}') # 소수점 이하 2자리 실수

exp = input('계산식을 입력하세요:')
calculator(exp)

 

 

eval() : 동적 코드 실행
- eval 함수는 문자열 형태로 된 파이썬 표현식을 평가하여 그 결과를 리턴한다.
- 이 함수를 이용하려면 실시간으로 코드를 만들어 실행할 수도 있다.

result = eval('2 + 3 * 4')
print(result)

city = eval("['서울', '대전', '광주']")
for c in city:
    print(c, end=',')
14
서울,대전,광주,

'프로그래밍 언어 > Python' 카테고리의 다른 글

[Python] Comprehension (List, Dictionary, Set)  (0) 2023.10.27
[Python] iterator 함수 (zip, enumerate)  (0) 2023.10.27
[Python] 매개변수  (0) 2023.10.26
[Python] Filter, Map, Reduce  (1) 2023.10.26
[Python] Lambda  (1) 2023.10.26