
function

▶ 기본구조
def 함수명 :
수행할 문장1
수행할 문장2
...
def add(a, b) :
return a + b
print(add(1, 3))
# 4
def 함수명(parameter)
return argutments
- 입력값이 없어도 된다. (parameter)
- 결과값이 없어도 된다. (retrun)
- 입력값과 결과값이 없어도 된다.
- 결과값은 무조건 하나다.
▶ 두개 이상도 반환이된다.
def double(a, b) :
return a*b, a+b
x = (double(9,10))
print(x)
# (90, 19)
▶ return을 만나게 되면 함수를 빠져나가게 된다.
def whoiam(word):
if word == "dog" :
return
print(word)
whoiam("dog")
# 출력값 없음
▷ 짝수 홀수 반환하기
def even_dd(num) :
if num & 2 == 0 :
msg = "짝"
else :
msg = "홀"
return f"{num}은(는) {msg}수 입니다"
even_dd(3)
# '3은(는) 홀수 입니다'
▷ 좋아하는 색 출력받기
def favorate_color(name, color, amount) :
if amount == "1" :
msg = "좋아하지 않아요."
elif amount == "2" :
msg = "조금 좋아해요."
elif amount == "3" :
msg = "매우 좋아해요."
return f"{name}님은 {color}색을 {msg}"
print(favorate_color(input("이름을 입력하세요 : "), input("색을 입력하세요 : "), input("1, 2, 3 중 좋아하는 만큼 입력하세요 : ")))
# 이름을 입력하세요 : 정상록
# 색을 입력하세요 : 하얀
# 1, 2, 3 중 좋아하는 만큼 입력하세요 : 3
# 정상록님은 하얀색을 매우 좋아해요.
▷ 시작수과 끝수의 합 구하기
def sum2(a, b) :
result = 0
for i in range(a, b+1) :
result += i
return f"{a}~{b}의 합계 = {result}"
print(sum2(1000, 10000))
# 1000~10000의 합계 = 49505500
※ 등차 수열 풀이
def summ(first, last):
return (last - first + 1) / 2 * (last + first)
※ 배수의 합 구하기
start = int(input("시작 수를 입력하세요 :"))
end = int(input("끝 수를 입력하세요 :"))
besu = int(input("합계를 구할 배수를 입력하세요 :"))
def sum_besu(start, end, besu) :
result = 0
for i in range(start, end+1) :
if i % besu == 0 :
result += i
return result
result = sum_besu(start, end, besu)
print("%d ~ %d의 정수중 %d의 배수의 합 : %d" % (start, end, besu, result))
# 시작 수를 입력하세요 :1
# 끝 수를 입력하세요 :10
# 합계를 구할 배수를 입력하세요 :3
# 1 ~ 10의 정수중 3의 배수의 합 : 18
▷ 원의 넓이 구하기
def circle_area(r) :
area = r*r*3.14
return "반지름 : %d, 원의면적 %.2f" % (r, area)
r = int(input("원의 반지름을 입력하세요 : "))
print(circle_area(r))
# 원의 반지름을 입력하세요 : 20
# 반지름 : 20, 원의면적 1256.00
▷ 최대공약수 구하기
num1 = int(input("첫 번째 수를 입력하세요 : "))
num2 = int(input("두 번째 수를 입력하세요 : "))
def compute_max_gong(a, b) :
result = 0
li1 = []
if a > b :
c = a
elif a < b :
c = b
else :
return a
for i in range(1, c+1) :
if a % i == 0 and b % i == 0 :
result = i
return result
max_gong = compute_max_gong(num1, num2)
print("%d와(과) %d의 최대공약수 : %d" % (num1, num2, max_gong))
# 첫 번째 수를 입력하세요 : 10
# 두 번째 수를 입력하세요 : 100
# 10와(과) 100의 최대공약수 : 10
※ 인수분해 풀이
def compute_max_gong(num1, num2):
n = 1
i = 2
while True:
if num1 % i == 0 and num2 % i == 0:
n *= i
num1 /= i
num2 /= i
elif num1 % i == 0:
num1 /= i
elif num2 % i == 0:
num2 /= i
else:
i += 1
if num1 == 1 or num2 == 1:
return n
Parameter 안의 변수 지정
def sub(a, b):
return a-b
print(sub(a=10, b=10))
print(sub(b=10, a=20))
# 0
# 10
입력값이 여러개 일 때
▶ Non-keyword Aruguments
입력값이 여러개 일 경우 괄호안의 매개변수 앞에 "*"를 붙인다.
통상적으로 *args를 사용한다.
def 함수이름(*매개변수) :
수행문
...
def adder(*args) :
result = 0
for i in args :
result += i
return result
print(adder(1, 2, 3, 4, 5))
# 15
▷ 더하기 곱하기
def two_choice(word, *args):
s = 1
s = sum(args) if word == 'arithmetic' else mul(*args) if word == 'multiplication' else 0
return s
two_choice("arithmetic", 1, 2, 3, 4, 5)
# 15
▷ 평균 구하기
def average(*args) :
total = 0
for i in args :
total += i
return "%d과목의 평균 : %.2f점" % (len(args), (total / len(args)))
print(average(87, 98, 97, 76))
# 4과목의 평균 : 89.50점
Keyword arguments
parameter 앞에 **를 붙이면 parameter가 딕셔너리 형태로 출력된다.
통상적으로 **kwargs를 사용한다.
Key = value 형태로 출력.
def 함수명(**parameter) :
수행문
def ex(**abc) :
print(abc)
ex(a=1, food="apple")
# {'a': 1, 'food': 'apple'}
▶ 매개변수, args, keargs
def f(a, *args, **kwargs) :
return a, args, kwargs
print(f("a", 1, 2, 3, 4, b=5))
# ('a', (1, 2, 3, 4), {'b': 5})
▷ 출력 예제1
def intro(**kwargs) :
print(f'Data type of argument: {type(kwargs)}')
for key, value in kwargs.items() :
print(f"{key} is {value}")
intro(Firstname = "Dave", Lastname = "Karim", Age = 32, Phone= "010345325565")
# Data type of argument: <class 'dict'>
# Firstname is Dave
# Lastname is Karim
# Age is 32
# Phone is 010345325565
매개변수에 초기값 미리 설정하기
parameter에 초기값을 미리 설정할 수 있다.
이는 값이 항상 변하지 않는 경우에 유용하게 사용된다.
함수 안에서 함수 밖의 변수 변경
아래 함수add의 parameter 안의 a는 함수 밖의 a와는 별개로 작용한다.
- Local Variable(지역변수) : 호출된 함수 내에서만 유효하다.
- Global Variable(전역변수) : 하위의 모든 함수에서 유효하다.
a = 0
def add(a, b) :
return a+b
a = add(1, 5)
print(c)
# 6
▶ global을 사용하면 함수 내에서 전역변수의 변경이 가능하다.
def func() :
global x
x = 100
x = 10
print(f"x = {x}, {id(x)}")
# x = 10, 140484756564560
func()
print(f"x = {x}, {id(x)}")
# x = 100, 140484756755920
lambda
함수를 생성할 때 사용하는 예약어.
def를 사용해야 할 정도로 복잡하지 않고 함수를 한줄로 간결하게 만들 때 사용한다.
return 명령어가 없어도 결과값을 돌려준다.
▶ 기본 문법
함수명 = lamda parameter.. : 표현식..
add = lambda a, b : a + b
print(add(1, 2))
# 3
▶ 함수 안의 lambda
def mul(n) :
return lambda x : x * n
a = mul(5)
# a = lambda x : x * 5
print(a(5))
# 25
자주 사용하는 함수
▶ abs()
절대값을 반환한다.
print(abs(-7), abs(7))
# 7 7
▶ all()
반복가능한 매개변수로 저장된 값이 모두 True면 True를 아니면 Flase를 반환한다.
print(all([1, 2, 3]))
# True
print(all([]))
# True
print(all([1, False]))
▶ any()
반복가능한 매개변수로 저장된 값중 하나라도 True면 True를 아니면 Flase를 반환한다.
print(any([False]))
# False
print(any([True, False]))
# True
▶ eval()
실행가능한 문자열을 입력받아 문자열을 실행한 값을 리턴
print(eval("1+2"))
# 3"
# print(eval(""good+morning""))
▶ filter()
조건에 맞는 데이터만 찾아 반환한다.
# 조건에 맞는 데이터를 찾는다.
# filter(필터링을 적용할 함수, 반복가능한데이터)
num = list(range(1, 10))
def jjak(a) :
return a % 2 ==0
jjak_list = list(filter(jjak, num))
print(jjak_list)
# [2, 4, 6, 8]
for i in filter(jjak, num) :
print("%d is jjaksu" % i)
# 2 is jjaksu
# 4 is jjaksu
# 6 is jjaksu
# 8 is jjaksu
▶ map()
반복가능한 객체를 조건에 맞추어 반환한다.
# map()
# map(적용할 함수, 반복가능한객체)
def fun(num) :
return num * 100
print(map(fun, list(range(1, 5))))
print(list(map(fun, list(range(1, 5)))))
# <map object at 0x7f9668a42dc0>
# [100, 200, 300, 400]
▶ pow(x, y)
x를 y제곱하여 반환한다.
▶ sorted()
반복가능한 데이터를 정렬하여 데이터를 반환한다.
▶ sort()
반복가능한 객체를 정렬한다.
▶ zip()
리스트나 튜플 같은 반복 가능한 데이터를 같은 위치의 요소끼리 하나로 묶어준다.
# zip() 리스트나 튜플 같은 반복 가능한 데이터를 같은 위치의 요소 끼리 하나로 묶어준다.
name = ["a", 'B', 'C']
age = [11, 44, 33]
height = [243,132, 243]
result = zip(name, sorted(age), sorted(height))
print(result)
print(list(result))
# <zip object at 0x7f9668a32580>
# [('a', 11, 243), ('B', 44, 132), ('C', 33, 243)]
종합예제
▶ 영어 단어 확인하기
eng_dict = {"orange":"오렌지", "cookie":"과자", "mother":"어머니", "brother":"형제", "python":"파이썬"}
def matchWord(word, answer) :
msg = "맞습니다" if word == answer else "아닙니다."
return msg
for key in eng_dict :
string = input(f'{eng_dict[key]} 에 맞는 영단어는 ? ')
result = matchWord(string, key)
print(result)
▶ 함수 내 함수를 통한 큰 수 구하기
a = int(input('첫 번째 수를 입력하세요: '))
b = int(input('두 번째 수를 입력하세요: '))
c = int(input('세 번째 수를 입력하세요: '))
def maxTwo(a, b) :
return max(a, b)
def maxThree(a, b, c) :
return max(maxTwo(a, b), c)
max_num = maxThree(a, b, c)
print('%d, %d, %d 중 가장 큰 수 : %d' % (a, b, c, max_num))
# 첫 번째 수를 입력하세요: 25
# 두 번째 수를 입력하세요: 333
# 세 번째 수를 입력하세요: 54
# 25, 333, 54 중 가장 큰 수 : 333
'Python' 카테고리의 다른 글
[python] 파일 읽고 쓰기, 이름 바꾸기 (0) | 2022.08.31 |
---|---|
[python] for, if문 축약 (0) | 2022.08.31 |
[Python] 예제 : 요일 확인 프로그램 (0) | 2022.08.30 |
[Python] 예제 : 회문(Palindrom) (0) | 2022.08.29 |
[Python] 반복문 while (0) | 2022.08.29 |