프로그래밍 언어/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
서울,대전,광주,