수학의 함수와 동일하다
파이썬에서 기본으로 제공하는 내장 함수와 사용자가 직접 선언하는 사용자 함수가 있다
내장 함수
print('Hello python!')
사용자 함수
def printUserName(name): print(f'{name}고객님, 안녕하세요')
def addCal(): n1 = int(input('n1 입력 : ')) n2 = int(input('n2 입력 : ')) print(f'n1 + n2 = {n1 + n2}') addCal() addCal() addCal() addCal() addCal()
def calFun(): n1 = int(input('n1 입력 : ')) n2 = int(input('n2 입력 : ')) print(f'n1 * n2 = {n1 * n2}') print(f'n1 / n2 = {round(n1 / n2, 2)}') calFun()
def fun1(): print('fun1 호출!') fun2() def fun2(): print('fun2 호출!') fun3() def fun3(): print('fun3 호출!') fun1() fun2() fun3()
pass를 사용하면 error생기지 않음
def printTodayWeather(): pass def printTomorrowWeather(): pass printTodayWeather() printTomorrowWeather()
맨 밑줄의 guguDan2() 부터 실행되고 그 이후는 위에서부터 순차적으로 실행됨
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)) guguDan5()
def guguDan5(): for i in range(1, 10): print('5 * {} = {}'.format(i, 5*i))
guguDan2()
def greet(customer): -> 매개변수(함수 내부에서만 사용가능) print(f'{customer} 고객님 안녕하세요.')
greet('홍길동') -> 인수
개수가 일치하지 않으면 TypeError 생김
def addFun(n1, n2): -> 매개변수 2개 print(f'{n1} + {n2} = {n1+n2}')
addFun(10) -> 인수 1개
def printNumber(*numbers): -> 매개변수 개수가 정해지지 않았을때 for number in numbers: print(number, end='') print()
def printScore(kor, eng, mat): total = kor + eng + mat average = total / 3 print('총점: {}'. format(total)) print('평균: {}'. format(average))
korScore = int(input('국어 점수 입력: ')) engScore = int(input('영어 점수 입력: ')) matScore = int(input('수학 점수 입력: '))
printScore(korScore, engScore, matScore)
def calculator(n1, n2): result = n1 + n2 return result
returnValue = calculator(20, 10) print(f'returnValue: {returnValue}')
return 아래부분은 실행되지 않음
def cmToMm(cm): result = cm * 10 return result
length = float(input('길이(cm)입력: ')) returnValue = cmToMm(length) print('returnValue: {}mm' .format(returnValue))
import random
def getOddRandomNumber(): while True: rNum = random.randint(1, 100) if rNum % 2 != 0: break return rNum
print('returnValue: {}' .format(getOddRandomNumber()))
global 키워드
num_out = 10 def printNumbers(): global num_out num_out = 20 print(f'num_out: {num_out}') printNumbers() print(f'num_out: {num_out}')
global을 사용하여 값이 변경됨
num_out: 20 num_out: 20
함수안에 또 다른 함수가 있는 형태이다
내부 함수를 함수 밖에서 호출할 수 없다
(실습) 덧셈, 뺄셈, 곱셈, 나눗셈 함수 선언
def calculator(n1, n2, operator): def addCal(): print('덧셈 연산: {}' .format(n1 + n2)) def subCal(): print('뺄셈 연산: {}'.format(n1 - n2)) def mulCal(): print('곱셈 연산: {}' .format(n1 * n2)) def divCal(): print('나눗셈 연산: {}' .format(n1 / n2)) if operator == 1: addCal() elif operator == 2: subCal() elif operator == 3: mulCal() elif operator == 4: divCal()
while True: num1 = float(input('실수(n1) 입력: ')) num2 = float(input('실수(n2) 입력: ')) operatorNum = int(input('1.덧셈, 2.뺄셈, 3.곱셉, 4.나눗셈, 5.종료')) if operatorNum == 5: print('Bye~') break
calculator(num1, num2, operatorNum)
def calculator(n1, n2): return n1 + n2
위의 두줄을 lamda 함수를 이용하여 간단히
calculator = lambda n1, n2: n1 + n2
getTriangleArea = lambda n1, n2: n1 * n2 / 2 getSquareArea = lambda n1, n2: n1 * n2 getCircleArea = lambda r: radius * radius * 3.14
width = int(input('가로 길이 입력: ')) height = int(input('세로 길이 입력: ')) radius = int(input('반지름 길이 입력: '))
triangleValue = getTriangleArea(width, height) squareValue = getSquareArea(width, height) circleValue = getCircleArea(radius)
print('삼각형 넓이: {}' .format(triangleValue)) print('사각형 넓이: {}' .format(squareValue)) print('원 넓이: {}' .format(circleValue))
이미 만들어진 훌륭한 기능으로 사용자는 쉽게 사용할 수 있다(계산 모듈, 난수 모듈, 날짜/시간 모듈)
파이썬 모듈의 구분
내부모듈 -> 파이썬 설치 시 기본적으로 사용할 수 있는 모듈
외부 모듈 -> 별도 설치 후 사용할 수 있는 모듈
사용자 모듈 -> 사용자가 직접 만든 모듈
(실습) random 모듈을 이용해 난수 발생
1부터 10까지의 정수 중 난수 1개 발생
import random rNum = random.randint(1, 10) print('rNum: {}' .format(rNum))
0부터 100사이의 난수 10개를 발생
import random rNums = random.sample(range(101), 10) print('rNums: {}' .format(rNums))
- import 키워드를 이용해서 모듈을 임포트 한다
import calculator
- as 키워드를 이용해서 모듈 이름을 단축 시킬 수 있다
import calculator as cal
cal.add(10, 20) cal.sub(10, 20) cal.mul(10, 20) cal.div(10, 20)
- from ~ as 키워드를 이용해서 모듈의 특정 기능만 사용할 수 있다
from calculator import add from calculator import sub
add(10, 20) sub(10, 20)
','를 이용하여 더 줄일 수 있음
from calculator import add, sub
실행 파일(시작 파일)일 경우에만 '__main__' 이 저장된다
중급으로 넘어와 드디어 함수를 배웠는데 새롭지만 익숙한 부분이 많아서 강의와 함께 실습문제를 풀어볼때 재미있었다
뒤로 갈수록 기억안나는 부분이 조금씩 생겨서 헷갈리는 느낌이 들었고 함수에 조건문과 반복문을 응용해 사용하는것이 가장 어려웠다
가장 좋은 방법은 반복해서 문제를 풀어보는 것이란걸 느꼈다 해도해도 손에 붙지 않을때가 많으니 직접 코드를 작성해보면서 느낌을 손에 익히도록 노력해야겠다
내일은 따로 강의 스케줄이 없으니 지금까지 한 부분의 실습 문제들을 중심으로 풀어볼 생각이다